3

我从 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吗?

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

4

3 回答 3

4

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

for但是,当您完全可以通过使用适当的 API 方法来避免不必要的对象强制转换来缩短解析时,仅仅避免循环就太过分了。

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");
} 
于 2013-07-16T07:22:44.753 回答
0

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

于 2013-07-16T07:13:22.280 回答
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;
    }
于 2013-07-16T07:22:47.943 回答