2015-02-21 4 views
1

У меня есть парсер json, который анализирует сложный объект json. Некоторые объекты имеют ключ «a2», а некоторые нет. Я хочу вернуть «не найден», когда объект не имеет ключа «a2». Вот мой код:complex json parsing not found exception java

String JSON = {"IP":{"string":"1.2.3.4"},"rrr":{"test":{"a1":"36","a2":"www.abc.com"}}} 

public String getParameters(JSONObject json) throws JSONException { 

    String jsonString; 
    if ((jsonString = json.getJSONObject("rrr").getJSONObject("test") 
      .getString("a2")) != null) { 
     return jsonString; 
    } else 
     return "not Found"; 

     } 

Но то, что происходит в коде, если анализатор не находит «a2» он бросает исключение, и он возвращается. Какие изменения я внес в код, чтобы заставить его работать?

+0

Вы должны включать полное сообщение об исключении. –

ответ

1

В случае getTYPE(key) методов они будут выбрасывать исключение, если элемент key не найден.

Чтобы избежать этого, вы можете использовать optTYPE(key), который в этом случае вернет null или какое-то значение по умолчанию.
В случае optString он вернет пустую строку в качестве значения по умолчанию, но вы можете использовать optString(key, null), чтобы указать, что вы предпочтете вернуть null, если key элемент не будет существовать.

Так что ваш код может выглядеть

public String getParameters(JSONObject json) throws JSONException { 

    String jsonString; 
    if ((jsonString = json.getJSONObject("rrr").getJSONObject("test") 
      .optString("a2",null)) != null) { 
    //  ^^^   ^^^^ <- default value in case of lack of element 
     return jsonString; 
    } else 
     return "not Found"; 

} 
+0

предыдущий работал хорошо – user2942227

+0

@ user2942227 Какой из них вы имеете в виду? Если вы имеете в виду [предыдущие версии моего ответа] (http://stackoverflow.com/posts/28641998/revisions), то сначала я добавил некоторые механизмы для проверки других ключей, таких как 'rrr', но так как ваш вопрос касался только' getString' я немного упростил его. В любом случае правило такое же: 'optXXX (key)' может вернуть значение по умолчанию, если ключ не будет найден, а 'getXXX (key)' будет генерировать исключение. – Pshemo