2013-03-15 99 views
0

我想知道是否有可能检查一些关键使用Java在一些jsonArray存在。例如:让说,我有这样的JSON字符串:Java的嵌套JSONArray

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

让我们假设该阵列由JSONArray类型存储在jsnArray。 我要检查,如果“ABC”键在jsnArray存在,如果存在的话,我应该得到true否则我应该得到false(在“ABC”的情况下,我应该得到如此)。 Thnkas

+3

这不是一个有效的json数组。或者你的意思是'{'abc':'hello','xyz':[{'name':'Moses'}]}或'[{'abc':'hello'},{'xyz':[ '名': '摩西'}}]'? – Alex 2013-03-15 17:20:45

+0

我会改变它,谢谢。仍然我怎么做我问过的? – vlio20 2013-03-15 17:22:56

回答

1

你贴什么是JSONObject,在其内部有一个JSONArray。在这个例子中唯一的数组是'xyz',它只包含一个元素。

甲JSONArray例子是下列之一:

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

可以测试是否JSONArray称为jArray,包含给定的JSONObject(一个类似于上面的示例情况)内包含键“你好”与以下功能:

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"); 
+0

我认为它灵魂与try/catch – vlio20 2013-03-15 17:58:26

+0

完成。非常感谢你 :) – 2013-03-15 18:07:02

1

使用正则表达式不会因为打开和关闭括号的工作。

你可以使用JSON库(如google-gson)到您的JSON数组转换成Java数组,然后处理它。

1

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

如果您将它保存为一个JSON对象,你可以使用这种方法检查键: http://www.json.org/javadoc/org/json/JSONObject.html#has(java.lang.String)

+0

是否有任何为什么要将jsonarray转换为json对象? – vlio20 2013-03-15 17:27:25

+0

是否有一个原因,你不能简单地解析输入作为一个JSONObject摆在首位?从上面的语法来看,它看起来像是收到了一个JSONObject,所以你不应该首先将它作为JSONArray保存下来。 – 2013-03-15 17:30:16

+0

我使用Parse作为我的cloude数据库。我想将这个“复杂的”json数组存储在其中一个字段中。也许最好将json作为字符串存储在Parse数据库中? – vlio20 2013-03-15 17:32:57

1

如果使用JSON智能图书馆在Java解析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/

希望这有助于你...