【问题标题】:How to tell if return is JSONObject or JSONArray with JSON-simple (Java)?如何使用 JSON-simple (Java) 判断返回是 JSONObject 还是 JSONArray?
【发布时间】:2013-05-07 02:43:08
【问题描述】:

我正在访问一项服务,有时会返回如下内容:

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

有时会得到这样的回报:

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

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

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

在第二种情况下我得到一个例外

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

如何避免这种情况?我只想知道如何检查我要回来的。 (第一种情况有时会有[],所以我不能做索引,我想要一种比只检查第一个字符更干净的方法。

一定有某种方法可以检查吗?

【问题讨论】:

  • 检查字符串是否以[] 开头和结尾应该很简单。你试过什么?
  • 我可以判断它是否存在并以 [] 结尾,但问题是我得到一个字符串 "[{\"param1\"...},{...}]"我似乎无法再次转换为数组。

标签: java json types json-simple


【解决方案1】:

简单的Java:

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

如果您想避免解析错误类型的 JSON 的开销,您还可以测试(声称的)JSON 是否以 [{ 开头。但要小心前导空格。

【讨论】:

  • 谢谢。这回答了我的问题。现在要弄清楚其余部分:)
【解决方案2】:

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

改用这个

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

【讨论】:

  • 感谢提供Json版本
猜你喜欢
  • 2011-09-01
  • 1970-01-01
  • 2012-04-16
  • 2012-04-28
  • 1970-01-01
  • 2011-11-09
  • 2017-10-13
  • 1970-01-01
相关资源
最近更新 更多