【问题标题】:Android, Parsing JSON objectAndroid,解析 JSON 对象
【发布时间】:2012-05-29 02:33:51
【问题描述】:

当我调用服务器时,它的响应基于 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":"不可用! ","title":"波兰 vs 希腊","publishedDate":"2012-06-08 17:00:00 +0100","clazz":"SoccerMatchPreview","re​​fKey":"SoccerMatchPreview_4fb897be18be8b87f9117595"} 类型为 org .json.JSONObject 无法转换为 JSONArray

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

【问题讨论】:

    标签: java android json parsing arrays


    【解决方案1】:
    JSONArray contestantObjects = jObject.getJSONArray("id");
    

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

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

    因此,在获取id JSON 对象后,您应该能够获取各个属性,例如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/

    【讨论】:

    • 感谢亲爱的 Chin,根据您提到的内容,我发现“id”是错误的键,因为我不需要它的项目。如何获取 body、publishedDate、refKey 和 title?基于什么,我应该解析“响应”字符串吗?
    • 要获得publishedDate、refKey和title,你只需要JSONObject jObject = new JSONObject(response); String publishedDate = jObject.get("publishedDate");等等。
    • 这部分,我强烈建议您研究一个好的 JSON 库,Google 的 GSON 似乎是一个不错的库。这是一个简短的教程:java.sg/parsing-a-json-string-into-an-object-with-gson-easily
    • 感谢 Chin 我可以解析它。
    猜你喜欢
    • 2023-03-05
    • 2021-10-30
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 2016-11-20
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多