从JSON获取子数组

时间:2013-07-16 07:05:08

标签: java json

我从json文件解析一些数据。这是我的JSON文件。

[
     {

       "topic": "Example1", 
       "contact": [
            {
                "ref": [
                    1
                ], 
                "corresponding": true, 
                "name": "XYZ"
            }, 
            {
                "ref": [
                    1
                ], 
                "name": "ZXY"
            }, 
            {
                "ref": [
                    1
                ], 
                "name": "ABC"
            }, 
            {
                "ref": [
                    1, 
                    2
                ], 
                "name":"BCA"
            }
        ] , 

        "type": "Presentation"
     }, 
    {

       "topic": "Example2", 
       "contact": [
            {
                "ref": [
                    1
                ], 
                "corresponding": true, 
                "name": "XYZ"
            }, 
            {
                "ref": [
                    1
                ], 
                "name": "ZXY"
            }, 
            {
                "ref": [
                    1
                ], 
                "name": "ABC"
            }, 
            {
                "ref": [
                    1, 
                    2
                ], 
                "name":"BCA"
            }
        ] , 

        "type": "Poster"
     }
]

我可以逐个获取和存储数据。喜欢这个

JSONArray getContactsArray = new JSONArray(jsonObject.getString("contact"));
for(int a =0 ; a < getContactsArray.length(); a++)
{
    JSONObject getJSonObj = (JSONObject)getContactsArray.get(a);
    String Name = getJSonObj.getString("name");
} 

1)现在,我的问题是有没有办法通过单个查询获取每个数组的所有name值。 2)我可以在Array中获取所有这些值吗?

如果我做错了,请纠正我。谢谢。

3 个答案:

答案 0 :(得分:2)

此处无法避免迭代,因为org.json和其他Json解析器也提供对对象的随机访问,但不提供对它们的属性的集体(作为集合)。所以,你不能查询像“所有联系对象的所有名称属性”这样的东西,除非你可能得到像 Gson 这样的Json解析器来解组它。

但是,当你可以通过使用适当的API方法来避免不必要的对象强制转换来绝对缩短解析时,这太过于避免for循环了。

JSONArray contacts = jsonObject.getJSONArray("contact");
String[] contactNames = new String[contacts.length()];
for(int i = 0 ; i < contactNames.length; i++) {
    contactNames[i] = contacts.getJSONObject(i).getString("name");
} 

答案 1 :(得分:0)

最好使用json解析器(如GSonJackson)将json编组为java对象。然后,您可以在java类中编写utitlity方法来检索该对象中的所有名称。

答案 2 :(得分:0)

试试这个:

创建文件的JSONObject并尝试获取所有名称的数组并迭代它以获取所有值。

public static String[] getNames(JSONObject jo) {

        int length = jo.length();
        if (length == 0) {
            return null;
        }
        Iterator i = jo.keys();
        String[] names = new String[length];
        int j = 0;
        while (i.hasNext()) {
            names[j] = (String) i.next();
            j += 1;
        }       
        return names;
    }
相关问题