处理json中的可选字段

时间:2013-10-11 19:01:38

标签: java 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 }

1 个答案:

答案 0 :(得分:4)

JSONObject from simple json implements a Map,您可以在使用之前检查get的返回值是否为null

但是,这也是API的限制。您无法判断null是来自JSON,还是来自get(String)缺少JSON值。

As JB Nizet stated in the comments,您可以使用containsKey(Object)进行区分。