Проверьте, доступен ли какой-либо конкретный объект 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",
}]
}