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

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

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

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Java

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

Q&A

解決済

1回答

5021閲覧

Jacksonを使ってJsonファイル取得(2件目以降の取得)

退会済みユーザー

退会済みユーザー

総合スコア0

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Java

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

0グッド

0クリップ

投稿2019/08/30 04:51

前提・実現したいこと

jacksonを使用して以下のjsonファイル(レコード3件)を読み込んで、値を取得したいです。
https://teratail.com/questions/64502
こちらを参考にして1件目の「yamada」はデータ取得できたのですが、2件目以降の「tanaka」「suzuki」を取得する方法が分かりません。
2件目、3件目のレコードを取得するにはどうしたらいいでしょうか?
よろしくお願いします。

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

エラーメッセージ

該当のソースコード

sample.json {"name":"yamada","age":"25","hobby":["run","swim"]} {"name":"tanaka","age":"28","hobby":["movie","music","reading"]} {"name":"suzuki","age":"31","hobby":["cooking","travel","gym","gardening"]} //コード public static void main(String[] args) { ObjectMapper mapper = new ObjectMapper(); try { String jsonText = "C:\\sample.json"; JsonNode node = mapper.readTree(new File(jsonText)); printNode(node, "root"); } catch (IOException e) { e.printStackTrace(); } } static void printNode(JsonNode node, String path) { if (node.isObject()) { // Object {} ノードを表示します。 Iterator<String> iter = node.fieldNames(); while (iter.hasNext()) { String name = (String)iter.next(); printNode(node.get(name), path + "." + name); } /* 名前とノードがペアになった反復子を使用することもできます。 Iterator<Map.Entry<String, JsonNode>> iter2 = node.fields(); while (iter2.hasNext()) { Map.Entry<String, JsonNode> entry = (Map.Entry<String, JsonNode>)iter2.next(); printNode(entry.getValue(), path + "." + entry.getKey()); } */ } else if(node.isArray()) { // Array [] ノードを表示します。 Iterator<JsonNode> iter = node.elements(); int index = 0; while (iter.hasNext()) { printNode((JsonNode)iter.next(), path + String.format("[%s]", index++)); } // どちらでもない場合に値を表示 } else { // Value を表示する。 System.out.println(String.format("%s: %s", path, node)); } }

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

プログラムが期待通りに動作しないのはsample.jsonのフォーマットに問題があるからだと思います。

json

1{"name":"yamada","age":"25","hobby":["run","swim"]} 2{"name":"tanaka","age":"28","hobby":["movie","music","reading"]} 3{"name":"suzuki","age":"31","hobby":["cooking","travel","gym","gardening"]}

読み込み結果を確認するために、以下の行を追加して実行してみてください。おそらく1行目にしか読み込んでいないと思います。

java

1String jsonText = "C:\\sample.json"; 2JsonNode node = mapper.readTree(new File(jsonText)); 3// ↓追加 4System.out.println(node.toPrettyString()); 5// ↑追加 6printNode(node, "root");

sample.jsonを以下のように編集して配列とすることで全体を読み込めると思います。

json

1[ 2 {"name":"yamada","age":"25","hobby":["run","swim"]}, 3 {"name":"tanaka","age":"28","hobby":["movie","music","reading"]}, 4 {"name":"suzuki","age":"31","hobby":["cooking","travel","gym","gardening"]} 5]

もし、jsonファイルの編集が出来ない場合は、1行ずつ読み込んで処理することになるかと思います。

java

1List<String> jsons = Files.readAllLines(Path.of("sample.json")); 2for (String json : jsons) { 3 System.out.println(json); 4}

投稿2019/08/30 09:30

rubytomato

総合スコア1752

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

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

退会済みユーザー

退会済みユーザー

2019/08/30 09:49

ご指摘の通りjsonの形式が間違っていました! 形式を直したところ動きました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問