[英]Android JSON parsing of multiple JSONObjects inside JSONObject
我有一个来自服务器的 JSON 字符串,它看起来像这样:
{
"categories": {
"0": {
"term_id": "247",
"name": "Content Curation"
},
"1": {
"term_id": "50",
"name": "Content Marketing"
},
"2": {
"term_id": "2",
"name": "Curation"
},
"3": {
"term_id": "246",
"name": "Inbound Marketing"
},
"4": {
"term_id": "47",
"name": "Marketing"
},
"5": {
"term_id": "4",
"name": "News Curation"
},
"6": {
"term_id": "36",
"name": "SEO"
},
"8": {
"term_id": "248",
"name": "Wordpress Content Curation"
}
}
}
我的任务是获取“term_id”和“name”字段的值。 我曾经使用以下代码从当前 JSONObject 获取“类别”对象:
JSONObject jObject = new JSONObject(responceData);
JSONObject categoryObject = jObject.getJSONObject("categories");
JSONArray jarray = new JSONArray("["+categoryObject.toString().substring(1,categoryObject.toString().length() - 1) + "]");
for(int i=0;i<jarray.length();i++)
{
JSONObject jobj = jarray.getJSONObject(i);
String term_id=jobj.getString("term_id");
String name=jobj.getString("name");
}
和categoryObject
看起来像这样:
{
"0": {
"term_id": "247",
"name": "Content Curation"
},
"1": {
"term_id": "50",
"name": "Content Marketing"
},
"2": {
"term_id": "2",
"name": "Curation"
},
"3": {
"term_id": "246",
"name": "Inbound Marketing"
},
"4": {
"term_id": "47",
"name": "Marketing"
},
"5": {
"term_id": "4",
"name": "News Curation"
},
"6": {
"term_id": "36",
"name": "SEO"
},
"8": {
"term_id": "248",
"name": "Wordpress Content Curation"
}
}
但在那之后我不知道如何获得这些字段。 有没有办法从 JSONObject 中获取所有 JSONObject 子项?
如果您有源代码或可以给我一个示例,请与我分享。
在这里你可以检索你所有的 json 数据,要求一个特定的 key 和 innerKey 来得到你想要的,干杯
try
{
String jsonString="";//your json string here
JSONObject jObject= new JSONObject(jsonString).getJSONObject("categories");
Iterator<String> keys = jObject.keys();
while( keys.hasNext() )
{
String key = keys.next();
Log.v("**********", "**********");
Log.v("category key", key);
JSONObject innerJObject = jObject.getJSONObject(key);
Iterator<String> innerKeys = innerJObject.keys();
while( innerKeys.hasNext() )
{
String innerKkey = keys.next();
String value = innerJObject.getString(innerKkey);
Log.v("key = "+key, "value = "+value);
}
}
}
catch (JSONException e)
{ e.printStackTrace(); }
检查这个答案,这样你就不需要知道键,并且可以循环并访问内部对象,但类别作为 JSONArray 而不是对象会更好,这样你就可以正常循环
for(int i = 0; i < array.length(); i++) {
JSONObject obj = myArray.get(i);
....
}
非常感谢 Ahmad Dwaik 和 Tom Hart 的回答。 这是解决方案的代码。
try
{
JSONObject jObject= new JSONObject(responseData).getJSONObject("categories");
Iterator<String> keys = jObject.keys();
while( keys.hasNext() )
{
String key = keys.next();
Log.v("**********", "**********");
Log.v("category key", key);
JSONObject innerJObject = jObject.getJSONObject(key);
String name = innerJObject.getString("name");
String term_id = innerJObject.getString("term_id");
Log.v("name = "+name, "term_id = "+term_id);
}
}
catch (JSONException e){
e.printStackTrace();
}
使用 keys() 迭代器迭代所有属性,并为每个属性调用 get() 。
Iterator<String> iter = json.keys();
while (iter.hasNext()) {
String key = iter.next();
try {
Object value = json.get(key);
} catch (JSONException e) {
// Something went wrong!
}
}
尝试这个
JSONObject jObject = new JSONObject(responceData);
JSONObject categoryObject = jObject.getJSONObject("categories");
JSONObject obj0 = categoryObject.getJSONObject("0");
String termId0 obj0.getString("term_id");
String name0 obj0.getString("name");
JSONObject obj1 = categoryObject.getJSONObject("1");
String termId1 obj1.getString("term_id");
String name1 obj1.getString("name");
但我同意 wqrahd,类别应该是一个数组
虽然 Ahmad Dwaik 'Warlock' 提供了一个很好的答案,但他的代码中有一个错误,当前代码是——
try
{
String jsonString="";//your json string here
JSONObject jObject= new JSONObject(jsonString).getJSONObject("categories");
Iterator<String> keys = jObject.keys();
while( keys.hasNext() )
{
String key = keys.next();
Log.v("**********", "**********");
Log.v("category key", key);
JSONObject innerJObject = jObject.getJSONObject(key);
Iterator<String> innerKeys = innerJObject.keys();
while( innerKeys.hasNext() )
{
String innerKkey = innerKeys.next(); //Here was the error
String value = innerJObject.getString(innerKkey);
Log.v("key = "+key, "value = "+value);
}
}
}
catch (JSONException e)
{ e.printStackTrace(); }
试试这个->
String response = data;
JSONObject categories= new JSONObject(data).getJSONObject("categories").getJSONObject('0').getJSONObject('term_id');
打印// 247
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.