繁体   English   中英

为什么我总是会收到JSON Exception?

[英]Why do I always get JSON Exception?

这是我第一次解析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数据。 我不知道为什么,但是我总是会遇到例外。 请告诉我代码中的错误是什么以及如何修复。

谢谢。

“名称:泰勒·斯威夫特(Taylor Swift)描述:歌手兼作词人泰勒·艾莉森·斯威夫特(Taylor Alison Swift)是美国歌手兼作曲家和女演员。在宾夕法尼亚州怀俄明辛(Wyomissing)长大,她14岁时移居田纳西州纳什维尔(Nashville),从事乡村音乐事业。”

问题是您的String detailedDescription行。

在检索articleBody之前,需要获取detailDescription对象。

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;
        }

同样,在JSON对象上调用.getString().toString()方法调用也是多余的。

在android json库中,它具有一个称为has元素的方法,该方法返回true或false。 成功检查后,再访问元素。 期望是由于试图访问不存在的元素引起的。

每次创建新对象以确保创建对象后,可能值得打印。 它还将明确期望的发生位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM