我正在接受一项服务,有时会收到这样的信息:
{ "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
如何避免这种情况?我想知道如何检查我要回来的。 (第一种情况有时会有[]
因此我无法做索引,而且我想要一种更清洁的方式,而不仅仅是检查第一个字符。
必须有某种方法可以检查这个吗?
答案 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
}