0

我想知道是否可以使用 java 检查某些 jsonArray 中是否存在某些键。例如:假设我有这个 json 字符串:

{'abc':'hello','xyz':[{'name':'Moses'}]}

让我们假设这个数组存储在 Type 的 jsnArray 中JSONArray。我想检查 jsnArray 中是否存在“abc”键,如果存在,我应该得到true,否则我应该得到false(在“abc”的情况下,我应该得到真)。思卡斯

4

4 回答 4

2

你发布的是一个JSONObject,里面有一个JSONArray。在此示例中,您拥有的唯一数组是 array 'xyz',它只包含一个元素。

JSONArray 示例如下:

{
 'jArray':
          [
           {'hello':'world'},
           {'name':'Moses'},
           ...
           {'thisIs':'theLast'}
          ]
}

您可以使用以下函数测试是否包含在给定(类似于上面示例的情况)中的被调用包含键“hello” JSONArrayjArrayJSONObject

boolean containsKey(JSONObject myJsonObject, String key) {
    boolean containsHelloKey = false;
    try {
        JSONArray arr = myJsonObject.getJSONArray("jArray");
        for(int i=0; i<arr.length(); ++i) {
            if(arr.getJSONObject(i).get(key) != null) {
               containsHelloKey = true;
               break;
            }
        }
    } catch (JSONException e) {}

    return containsHelloKey;
}

并以这种方式调用:

containsKey(myJsonObject, "hello");
于 2013-03-15T17:40:58.973 回答
1

如果您在 Java 中使用 JSON 智能库来解析 JSon 字符串 -

您可以使用以下代码片段解析 JSon 数组 -

喜欢 -

JSONObject resultsJSONObject = (JSONObject) JSONValue.parse(<<Fetched JSon String>>);
JSONArray dataJSon = (JSONArray) resultsJSONObject.get("data");
JSONObject[] updates = dataJSon.toArray(new JSONObject[dataJSon.size()]);

for (JSONObject update : updates) {
            String message_id = (String) update.get("message_id");
            Integer author_id = (Integer) update.get("author_id");
            Integer createdTime = (Integer) update.get("created_time");
            //Do your own processing...
            //Here you can check null value or not..
}

您可以在 - https://code.google.com/p/json-smart/获得更多信息

希望这可以帮助你...

于 2013-03-15T17:31:13.573 回答
1

JSON 数组没有键值对,JSON 对象有。

如果将其存储为 json 对象,则可以使用以下方法检查密钥:http: //www.json.org/javadoc/org/json/JSONObject.html#has(java.lang.String)

于 2013-03-15T17:24:30.057 回答
1

由于开括号和右括号,使用正则表达式将不起作用。

您可以使用 JSON 库(如google-gson)将您的 JSON 数组转换为 java 数组,然后对其进行处理。

于 2013-03-15T17:22:56.713 回答