1

我正在尝试解析从 Web 服务器接收到的 json 字符串作为响应,但我有一个奇怪的问题。在我的 json 中,我有一些JSONObjects,我永远不知道它们的名字是什么,我应该根据它有多少来循环它们keys。但问题在于我使用的代码每次都获得相同的值,即使我知道还有其他值也是如此。

这是我正在使用的鳕鱼:

JSONObject json = (JSONObject) new JSONTokener(jsonBuffer).nextValue();


        JSONObject country = json.getJSONObject(String.valueOf(json.keys().next()));
        Iterator<Object> keys = json.keys();
        while (keys.hasNext()) {


            String countryName = country.getString("country_name");
            Log.e("","country_name: "+countryName);

            String data = country.getString("data");
            Log.e("","data : "+data);
        }

这是我的 json 的样子:

"AZ": {
    "country_name": "Azerbaijan",
    "data": {
        "181261": {
            "time_published": "2012-04-04 15:55:29",
            "title": "Azerbaijan, Turkey not to change stakes in TANAP",
            "body": null
        },
        "181260": {
            "time_published": "2012-04-04 15:53:10",
            "title": "SOCAR mulls acquisition of Swiss refinery",
        },
        "181061": {
            "time_published": "2012-04-03 05:53:00",
            "title": "Azerbaijan, Lithuania mull LNG terminal investment",
        },
        // and so on....
    }
}, // and it keeps going on 

任何想法我的 jsonParser 应该是什么样子?

4

3 回答 3

2

我对 Android 和 Java 不是很熟悉,但我认为应该是:

// parse JSON
JSONObject json = (JSONObject) new JSONTokener(jsonBuffer).nextValue();

// get all keys (they are probably strings)
Iterator<String> keys = json.keys();

// as long as there are more keys
while (keys.hasNext()) {
    // get the object corresponding to the next key
    JSONObject country = json.getJSONObject(keys.next());

    String countryName = country.getString("country_name");
    Log.e("","country_name: "+countryName);

    String data = country.getString("data");
    Log.e("","data : "+data);
}

从我的评论:

在我看来,您有一个无限while循环,实际上它永远不会为country.

您必须遍历所有键,获取键的国家对象,然后访问它的值。

目前您正在获取第一个国家元素,获取键并检查迭代器是否包含键。但是您并没有推进迭代器。

于 2012-04-10T10:22:30.720 回答
1

你的代码不应该是:

    Iterator<Object> keys = json.keys();
    while (keys.hasNext()) {
        JSONObject country = json.getJSONObject(String.valueOf(keys.next()));
        //etc.
    }
于 2012-04-10T10:22:41.327 回答
1

它不会遍历国家名称,因为代码只是检查它是否有下一个并且永远不会到达下一个。但其余代码似乎也不起作用。您需要首先将 json.keys() 获取到局部变量,然后对其进行迭代。

于 2012-04-10T10:35:39.947 回答