2013-10-11 2 views
1

Я пытаюсь разобрать JSON со следующим форматомРабота с дополнительным полем в формате JSON

JSONObject json; 
     try { 
      json = (JSONObject)parser.parse(value.toString()); 

      String foo = (String) json.get("foo").toString();//error here 
      String id1 = (String) json.get("_id"); 

      JSONArray array = (JSONArray)json.get("bar"); 
      } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

Теперь вопрос ... Foo и массив необязательны поле .... Иногда он присутствует. . А иногда даже нет ..

Я думал, что это будет работать .. кроме ТАГТ я вижу ошибку NullPointer обозначенную комментарию выше блока кода ..

Error: 
java.lang.NullPointerException 
    at org.hadoop.Foo$MapClass.map(Foo.java:48) 

Любой пример JSON

{ "_id" : "foobar", "foo" : null } 
{ "_id" : "foobar", "foo" : null , "bar":[{"id":1}]} 
{ "_id" : "foobar"} 
{ "_id" : "foobar", "foo" : 23 } 
+0

Как выглядит JSON, что вы пытаетесь разобрать? –

+0

@JustinJasmann: modified .. :) – Fraz

+0

Проблема в том, что вы пытаетесь 'toString()' на 'null'. Для решения вы можете обратиться к ответу Sotirios :) –

ответ

3

JSONObject from simple json implements a Map, вы можете просто проверить, что возвращаемое значение get не null перед его использованием.

Однако это также ограничение API. Вы не можете определить, исходит ли из null из JSON или из-за отсутствия значения JSON с get(String).

As JB Nizet stated in the comments, вы можете использовать containsKey(Object), чтобы сделать это различие.

+0

Привет, я использую jsonsimple api .. я не вижу какой-либо метод opt? – Fraz

+0

@fraz Какая версия? –

+0

Я использую 1.1.1 – Fraz

Смежные вопросы