JSON - JSONArray を繰り返し処理する
2023-11-08 05:42:03
質問
いくつかの配列を含むJSONファイルを持っています。私はファイルの配列を繰り返し、それらの要素とその値を取得したいと思います。
私のファイルはこのような感じです。
{
"JObjects": {
"JArray1": [
{
"A": "a",
"B": "b",
"C": "c"
},
{
"A": "a1",
"B": "b2",
"C": "c3",
"D": "d4"
"E": "e5"
},
{
"A": "aa",
"B": "bb",
"C": "cc",
"D": "dd"
}
]
}
}
ここまで来たか。
JSONObject object = new JSONObject("json-file.json");
JSONObject getObject = object.getJSONObject("JObjects");
JSONArray getArray = getObject.getJSONArray("JArray1");
for(int i = 0; i < getArray.length(); i++)
{
JSONObject objects = getArray.getJSONArray(i);
//Iterate through the elements of the array i.
//Get thier value.
//Get the value for the first element and the value for the last element.
}
このようなことは可能でしょうか?
このようにしたい理由は、ファイル内の配列の要素数が違うからです。
どのように解決するのですか?
変更
JSONObject objects = getArray.getJSONArray(i);
から
JSONObject objects = getArray.getJSONObject(i);
または
JSONObject objects = getArray.optJSONObject(i);
は、どのJSON-to/from-Javaライブラリを使用しているかに依存します。 (それは次のように見えます
getJSONObject
が動作するようです)。
次に、"objects"の中の文字列要素にアクセスするため。
JSONObject
にある文字列要素にアクセスするには、要素名でそれらを取り出します。
String a = objects.get("A");
の要素名が必要な場合は、その都度
JSONObject
にある要素の名前が必要な場合は、静的ユーティリティ・メソッド
JSONObject.getNames(JSONObject)
を使うことができます。
String[] elementNames = JSONObject.getNames(objects);
"最初の要素の値と、最後の要素の値を取得します."
もし"element"が配列の構成要素を参照している場合、最初の構成要素はインデックス0、最後の構成要素はインデックス
getArray.length() - 1
.
配列内のオブジェクトを繰り返し処理し、コンポーネントと値を取得したいです。この例では、最初のオブジェクトには 3 つのコンポーネントがあり、2 番目には 5 つのコンポーネント、3 番目には 4 つのコンポーネントがあります。それぞれのオブジェクトを繰り返し処理し、コンポーネント名と値を取得したい。
次のコードはまさにそれを行います。
import org.json.JSONArray;
import org.json.JSONObject;
public class Foo
{
public static void main(String[] args) throws Exception
{
String jsonInput = "{\"JObjects\":{\"JArray1\":[{\"A\":\"a\",\"B\":\"b\",\"C\":\"c\"},{\"A\":\"a1\",\"B\":\"b2\",\"C\":\"c3\",\"D\":\"d4\",\"E\":\"e5\"},{\"A\":\"aa\",\"B\":\"bb\",\"C\":\"cc\",\"D\":\"dd\"}]}}";
// "I want to iterate though the objects in the array..."
JSONObject outerObject = new JSONObject(jsonInput);
JSONObject innerObject = outerObject.getJSONObject("JObjects");
JSONArray jsonArray = innerObject.getJSONArray("JArray1");
for (int i = 0, size = jsonArray.length(); i < size; i++)
{
JSONObject objectInArray = jsonArray.getJSONObject(i);
// "...and get thier component and thier value."
String[] elementNames = JSONObject.getNames(objectInArray);
System.out.printf("%d ELEMENTS IN CURRENT OBJECT:\n", elementNames.length);
for (String elementName : elementNames)
{
String value = objectInArray.getString(elementName);
System.out.printf("name=%s, value=%s\n", elementName, value);
}
System.out.println();
}
}
}
/*
OUTPUT:
3 ELEMENTS IN CURRENT OBJECT:
name=A, value=a
name=B, value=b
name=C, value=c
5 ELEMENTS IN CURRENT OBJECT:
name=D, value=d4
name=E, value=e5
name=A, value=a1
name=B, value=b2
name=C, value=c3
4 ELEMENTS IN CURRENT OBJECT:
name=D, value=dd
name=A, value=aa
name=B, value=bb
name=C, value=cc
*/
関連
-
Collections.sortがdoubleでソートできない問題を完璧に解決する。
-
アクセス制限の解決方法: ---- in Java
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] JSONでコメントを使用することはできますか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] JavaScriptで配列を比較する方法は?
-
[解決済み] JavaScriptSerializer - 列挙型を文字列としてJSONシリアライズする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
java.sql.SQLException: executeQuery()でデータ操作文を発行できません。
-
javaの非静的メソッドを静的に参照することができない
-
Springの設定でxsdファイルのバージョン番号を設定しない方が良い理由
-
ajax コミット リソースの読み込みに失敗しました: サーバーはステータス 400 で応答しました ()
-
が 'X-Frame-Options' を 'sameorigin' に設定したため、フレーム内に存在する。
-
-bash: java: コマンドが見つからない 解決方法
-
Java appears タイプEを囲むインスタンスがアクセスできない。
-
JDK8 の Optional.of と Optional.ofNullable メソッドの違いと使い方を説明する。
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
org.xml.sax.SAXParseExceptionのエラー解決方法