15

ArrayList にダンプする必要がある以下のような JSON ファイルがあります。

{
 "main1" : [
  {
     "child1" : valueA,
     "child2" : valueB,
     "child3" : valueC,
  },
  {
     "child1" : value1,
     "child3" : value3,
  },
 ],
 "main2" : "valueMain2"
}

要素child2が存在するかどうかを確認してから、値を取得する必要があります。2 番目の配列には表示されないことがわかります。

私はネイティブ JSON (org.JSON) Java コードを使用しています。

ArrayList<HashMap<String,String>> myList = new ArrayList<HashMap<String,String>>();
JSONObject json = <my_json_object>;

JSONObject getchild2;

JSONArray jArray = <my_json_object>.getJSONArray("main1");
for(int j = 0; j < jArray.length(), j++){
  HashMap<String,String> map = new HashMap<String,String>();

  map.put("First Value", jArray.getJSONObject(j).getString("child1"));
  map.put("Third Value", jArray.getJSONObject(j).getString("child3"));

  getchild2 = jArray.getJSONObject(j).getJSONObject("child2");
  if(getchild2 == null){
    map.put("Second Value", "Some Dummy Value");
  } else {
    map.put("Second Value", jArray.getJSONObject(j).getString("child2"));
  }
 myList.add(map);
}

どうすればこれを達成できますか?

<my_json_object>ここにある URL 要求の HTTP 応答を取得するため、ネイティブ URL 解析を使用します: http://mobisys.in/blog/2012/01/parsing-json-from-url-in-android/

以下のエラーが表示されるため、機能しません。

E/AndroidRuntime(664): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
4

3 に答える 3

37

とにかく、私はいくつかのグーグルで解決策を得ました:

 if (!jArray.getJSONObject(j).has("child2")) {
  map.put("Second Value", "N.A");
 } else {
  map.put("Second Value", jArray.getJSONObject(j).getString("child2"));
 }

JSONObject の作成 getchild2 = jArray.getJSONObject(j).getJSONObject("child2"); むしろ不要でした。

そして、これはかなり完璧に機能します!詳細については、これを参照してください: JSON にサブオブジェクトが存在するかどうかを確認する

助けてくれてありがとう!

于 2012-05-16T11:59:34.040 に答える
11
getJSONObject("child2");

child2が存在しない場合、例外をスローします。代わりにこれを試してください:

getchild2 = jArray.getJSONObject(j).optJSONObject("child2");

そうすれば、child2が存在しない場合に例外をキャッチする必要がなく、代わりにnullをチェックできます。

于 2012-05-15T05:16:55.150 に答える
-3

これを試して:

{"main1" : [{
             "id":"1"
               "child1" : "valueA",
               "child2" : "valueB",
               "child3" : "valueC",
            }, {
                "id":"2"
                  "child1" : "value1",
                 "child3"  : "value3",
           }]
}
于 2012-05-15T04:54:05.943 に答える