我;我试图解析我从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应该是什么样的想法?
答案 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()放到一个局部变量上,然后迭代它。