Проверьте, доступен ли какой-либо конкретный объект JSON или нет.

У меня есть файл JSON, как показано ниже, который должен быть сброшен в ArrayList:

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

Элемент child2 должен быть проверен, если он существует или нет, а затем значение принимается. Вы можете видеть, что он не отображается во втором массиве.

Я использую Native 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

Ответы

Ответ 1

Во всяком случае, я получил решение с некоторым Googling: Я повторно создал его как

 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

Спасибо всем за помощь!

Ответ 2

getJSONObject("child2");

Будет выдано исключение, если child2 не существует. Вместо этого попробуйте:

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

Таким образом, вам не нужно поймать исключение, если child2 не существует и может вместо этого проверять значение null.

Ответ 3

Попробуйте следующее:

{"main1" : [{
             "id":"1"
               "child1" : "valueA",
               "child2" : "valueB",
               "child3" : "valueC",
            }, {
                "id":"2"
                  "child1" : "value1",
                 "child3"  : "value3",
           }]
}