質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

1037閲覧

JSONの戻りをオブジェクトに変換したい

daichaso12

総合スコア24

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2019/02/19 03:57

編集2019/02/19 04:23

前提・実現したいこと

以下のようなJSONが戻り値で返ってきています。これをオブジェクトに変換したく思います。

{ "status": 0, "data": { "item": [ { "userName": "xxx", "userId": "xxx", "icon_image_url": "xxx", "description": "xxx" } ] } }

発生している問題・エラーメッセージ

エラーは発生していないのですが、取得がうまくできずにオブジェクトの該当変数の中身がnullになってしまっています。

該当のソースコード

Java

1 InputStream in = con.getInputStream(); 2 String encoding = con.getContentEncoding(); 3 if (null == encoding) { 4 encoding = "UTF-8"; 5 } 6 InputStreamReader inReader = new InputStreamReader(in, encoding); 7 BufferedReader bufReader = new BufferedReader(inReader); 8 9 //ここでオブジェクトに変換する。 10 ObjectMapper mapper = new ObjectMapper(); 11 testUserData = mapper.readValue(bufReader.readLine(), TestUserData.class); 12 13 bufReader.close(); 14 inReader.close(); 15 in.close(); 16 con.disconnect(); 17 return testUserData;

補足情報(FW/ツールのバージョンなど)

以下のようなJSONは変換ができたのですが、配列になっているJSONの戻りでうまく動作できません。

{ "userId": "xxx", "userName": "xxx", "address": "xxxxxxx", "tel": 0123-45-6789, "age": 20 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

元のJSON文字列とされるものがそもそもJSONとして正しい形式でないのが気になります。

[]に直に入れるならkey:valueの形式が使えません。

こうか

JSON

1{ 2 "status": 0, 3 "data": { 4 "item": [ 5 { 6 "userName": "xxx", 7 "userId": "xxx", 8 "icon_image_url": "xxx", 9 "description": "xxx" 10 } 11 ] 12 } 13} 14

こうでは

JSON

1{ 2 "status": 0, 3 "data": { 4 "item": { 5 "userName": "xxx", 6 "userId": "xxx", 7 "icon_image_url": "xxx", 8 "description": "xxx" 9 } 10 } 11}

コード

どのように取得されているか分かりませんので、適当にローカルにjsonファイルを設置して同じ内容を投入、
そのファイルからJsonNodeで読み込むように作ってみました。

参考まで。

java

1import java.io.File; 2import java.io.IOException; 3 4import com.fasterxml.jackson.databind.JsonNode; 5import com.fasterxml.jackson.databind.ObjectMapper; 6 7public class JsonReader{ 8 static ObjectMapper mapper = new ObjectMapper(); 9 10 public static void main(String[] args) { 11 JsonNode node = null; 12 try { 13 node = mapper.readTree(new File("XXXXXXXXXX\test.json")); 14 15 System.out.println(node); 16 System.out.println(node.get("status")); 17 System.out.println(node.get("data").get("item").get(0).get("userName").asText()); 18 } catch (IOException e) { 19 e.printStackTrace(); 20 } 21 22 } 23}

出力結果:

{"status":0,"data":{"item":[{"userName":"xxx","userId":"xxx","icon_image_url":"xxx","description":"xxx"}]}} 0 xxx

投稿2019/02/19 04:13

編集2019/02/19 06:20
m.ts10806

総合スコア80854

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

daichaso12

2019/02/19 04:24

JSONの形式誤っていましたので修正しました。
m.ts10806

2019/02/19 04:25

なるほど。了解です。
m.ts10806

2019/02/19 04:27

NULLになる→正しいJSON形式ではないから変換できない という理解でしたが、正しく修正してもNULLだったということですか?
daichaso12

2019/02/19 04:31

そうですね 転記でのミスでもともとJSON自体は正しいのが返ってきていました。
m.ts10806

2019/02/19 06:18

回答追記していますが、よくみたら SpringBootのタグついてましたね。。 自前で準備するよりSpringの機能でできそうに思いますが、そのあたりはいかがでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問