这是我第一次解析JSON数据。我正在使用Google知识图api。我得到了api工作,我可以获得JSON结果。这是Google针对示例查询的示例返回数据,我现在正在使用它进行测试。
{
"@context": {
"@vocab": "http://schema.org/",
"goog": "http://schema.googleapis.com/",
"resultScore": "goog:resultScore",
"detailedDescription": "goog:detailedDescription",
"EntitySearchResult": "goog:EntitySearchResult",
"kg": "http://g.co/kg"
},
"@type": "ItemList",
"itemListElement": [
{
"@type": "EntitySearchResult",
"result": {
"@id": "kg:/m/0dl567",
"name": "Taylor Swift",
"@type": [
"Thing",
"Person"
],
"description": "Singer-songwriter",
"image": {
"contentUrl": "https://t1.gstatic.com/images?q=tbn:ANd9GcQmVDAhjhWnN2OWys2ZMO3PGAhupp5tN2LwF_BJmiHgi19hf8Ku",
"url": "https://en.wikipedia.org/wiki/Taylor_Swift",
"license": "http://creativecommons.org/licenses/by-sa/2.0"
},
"detailedDescription": {
"articleBody": "Taylor Alison Swift is an American singer-songwriter and actress. Raised in Wyomissing, Pennsylvania, she moved to Nashville, Tennessee, at the age of 14 to pursue a career in country music. ",
"url": "http://en.wikipedia.org/wiki/Taylor_Swift",
"license": "https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License"
},
"url": "http://taylorswift.com/"
},
"resultScore": 896.576599
}
]
}
所以我想解析它,以便我可以得到名称,描述,详细描述。这是我的代码,但我似乎总是得到例外。有什么想法吗?
try {
JSONObject object=new JSONObject(gggg);
JSONArray itemListElement = object.getJSONArray("itemListElement");
for(int i=0; i < itemListElement.length();i++){
JSONObject c = itemListElement.getJSONObject(i);
JSONObject results = c.getJSONObject("result");
String name = results.getString("name").toString();
String description = results.getString("description").toString();
String detailedDescription = results.getString("articleBody").toString();
gggg = "Name: "+name+"\n Description: "+description+"\n "+detailedDescription;
}
responseView.append(gggg);
} catch (JSONException e) {
Toast.makeText(MainActivity.this,gggg,Toast.LENGTH_LONG).show();
}
string gggg
也包含JSON数据。我不知道为什么,但我总是得到例外。请告诉我代码中的错误以及如何修复它。
感谢。
答案 0 :(得分:1)
“姓名:泰勒斯威夫特描述:创作歌手泰勒艾莉森 斯威夫特是美国创作歌手兼演员。提升 她在宾夕法尼亚州的Wyomissing搬到了田纳西州的纳什维尔 14岁,从事乡村音乐事业。 “
问题在于您的@Url.Content
行。
在检索articleBody之前,您需要获取detailedDescription对象。
String detailedDescription
当您在JSON对象上调用for(int i=0; i < itemListElement.length();i++){
JSONObject c = itemListElement.getJSONObject(i);
JSONObject results = c.getJSONObject("result");
String name = results.getString("name");
String description = results.getString("description");
JSONObject detailedDescription = results.getJSONObject("detailedDescription");
String articleBody = detailedDescription.getString("articleBody");
String x = "Name: "+name+"\n Description: "+description+"\n "+articleBody;
}
时,您的.toString()
方法调用也是多余的。
答案 1 :(得分:0)
在android json库中,它有一个名为has element的方法,它返回true或false。成功检查后,然后访问该元素。通过访问不存在的元素来引起期望。
每次创建新对象以确保创建对象后,可能值得打印出来。它也会发生在预期正在发生的地方。