如何使用JSON-simple(Java)判断返回是JSONObject还是JSONArray?

时间:2013-05-07 02:43:08

标签: java json types json-simple

我正在接受一项服务,有时会收到这样的信息:

{ "param1": "value1", "param2": "value2" }

有时会像这样回来:

[{ "param1": "value1", "param2": "value2" },{ "param1": "value1", "param2": "value2" }]

我怎么知道我得到了什么?当我执行getClass()时,它们都评估为String但是如果我尝试这样做:

json = (JSONObject) new JSONParser().parse(result); 

在第二个案例中我得到了一个例外

org.json.simple.JSONArray cannot be cast to org.json.simple.JSONObject

如何避免这种情况?我想知道如何检查我要回来的。 (第一种情况有时会有[]因此我无法做索引,而且我想要一种更清洁的方式,而不仅仅是检查第一个字符。

必须有某种方法可以检查这个吗?

2 个答案:

答案 0 :(得分:20)

简单Java:

Object obj = new JSONParser().parse(result); 
if (obj instanceof JSONObject) {
    JSONObject jo = (JSONObject) obj;
} else {
    JSONArray ja = (JSONArray) obj;
}

如果你想避免解析错误类型的JSON的开销,你还可以测试(声称的)JSON是以[还是{开头。但要小心领先的空白。

答案 1 :(得分:0)

尽管它与上面的类似,但是它们不是JSONParser的默认构造函数。错误来了:构造函数JSONParser()未定义

改为使用此

JsonElement jsonElement = new JsonParser().parse(jsonString);
if (jsonElement.isJsonArray()) {
    //Your Code
} else {
    //Your Code
}