1

当我调用服务器时,它的响应基于 json 对象。实际上,我知道如何解析 JSON 对象,但这个响应对我来说很奇怪。服务器响应是:

{"body":"Not Available!","clazz":"SoccerMatchPreview","id":{"inc":-2024241794,"machine":415106952,"new":false,"time":1337861978000,"timeSecond":1337861978},"publishedDate":"2012-06-08 17:00:00 +0100","refKey":"SoccerMatchPreview_4fb897be18be8b87f9117595","title":"Poland vs Greece"}

我需要的那些信息是 body、publishedDate、refKey 和 title。我基于 JSON 对象编写的代码是这样的:

JSONObject jObject = new JSONObject(response);
                    JSONArray contestantObjects = jObject.getJSONArray("id");
                    for(int i=0; i<contestantObjects.length(); i++) {
                        mPreview.setBody(contestantObjects.getJSONObject(i).getString("body").toString());
                        mPreview.setPublishedDate(contestantObjects.getJSONObject(i).getString("publishedDate").toString());
                        mPreview.setRefKey(contestantObjects.getJSONObject(i).getString("refKey").toString());
                        mPreview.setTitle(contestantObjects.getJSONObject(i).getString("title").toString());
                    }

但是因为它没有“[]”,所以我认为它不是 JSON 对象。因此,我编写了另一个基于代码的 JSON 数组。

JSONArray contestantObjects = new JSONArray(response);
                    for(int i=0; i<contestantObjects.length(); i++) {
                        mPreview.setBody(contestantObjects.getJSONObject(i).getString("body").toString());
                        mPreview.setPublishedDate(contestantObjects.getJSONObject(i).getString("publishedDate").toString());
                        mPreview.setRefKey(contestantObjects.getJSONObject(i).getString("refKey").toString());
                        mPreview.setTitle(contestantObjects.getJSONObject(i).getString("title").toString());
                    }

但结果相同,Logcat 显示:

值 {"id":{"timeSecond":1337861978,"time":1337861978000,"new":false,"machine":415106952,"inc":-2024241794},"body":"不可用!"," org.json 类型的标题":"波兰 vs 希腊","publishedDate":"2012-06-08 17:00:00 +0100","clazz":"SoccerMatchPreview","re​​fKey":"SoccerMatchPreview_4fb897be18be8b87f9117595"}。 JSONObject 无法转换为 JSONArray

任何建议将不胜感激。谢谢

4

1 回答 1

4
JSONArray contestantObjects = jObject.getJSONArray("id");

你的错误在这里,id它本身就是一个复杂的对象,而不是一个数组。

"id":{"inc":-2024241794,"machine":415106952,"new":false,"time":1337861978000,"timeSecond":1337861978}

因此,在获取idJSON 对象后,您应该能够获取各个属性,例如incmachinenewtimetimeSecond

JSONObject idObject = ...getJSONObject("id");
String machine = idObject.get("machine");

JSON 数组数据结构看起来像这样:[]表示一个数组。

例如,"Animals":["Pig", "Cat", "Dog"]

在另一个例子中,它也可以是一个复杂对象的数组,"Animals":[{"name":"AAA", "blood":"A"}, {"name":"BBB", "blood":"B"}].

编辑:这是我推荐的一个很好的 JSON 可视化工具。

http://jsonviewer.stack.hu/

在此处输入图像描述

于 2012-05-29T02:36:24.450 回答