Android JSON解析器每次都获得相同的值

时间:2012-04-10 10:12:36

标签: android json parsing

我;我试图解析我从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应该是什么样的想法?

3 个答案:

答案 0 :(得分: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分配新值。

您必须迭代所有键,获取键的country对象,然后访问它的值。

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

答案 1 :(得分:1)

你的代码不应该是:

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

答案 2 :(得分:1)

它不会遍历国家/地区名称,因为代码只是检查它是否具有下一个并且永远不会到达下一个。 但其余代码似乎也不起作用。你需要先将json.keys()放到一个局部变量上,然后迭代它。