【问题标题】:Decipher JSON response googles topic api解密 JSON 响应谷歌主题 api
【发布时间】:2013-07-24 19:07:02
【问题描述】:

我正在使用 goggle 的 search api 获取主题 id,用于从主题 api 获取 JSON 响应。返回的响应如下所示

{
"id":"/m/01d5g",
"property":{
    "/amusement_parks/ride_theme/rides":{...},
    "/award/ranked_item/appears_in_ranked_lists":{...},
    "/book/book_character/appears_in_book":{
            "valuetype":"object",
            "values":[
                {
                    "text":"Inferno",
                    "lang":"en",
                    "id":"/m/0g5qs3",
                    "creator":"/user/duck1123",
                    "timestamp":"2010-02-11T04:00:59.000Z"
                },
                {
                    "text":"Batman: Year One",
                    "lang":"en",
                    "id":"/m/0hzz_1h",
                    "creator":"/user/anasay",
                    "timestamp":"2012-01-25T11:05:03.000Z"
                },
                {
                    "text":"Batman: The Dark Knight Returns",
                    "lang":"en",
                    "id":"/m/0hzz_sb",
                    "creator":"/user/anasay",
                    "timestamp":"2012-01-25T11:22:17.001Z"
                },
                {
                    "text":"Batman: Son of the Demon",
                    "lang":"en",
                    "id":"/m/071l77",
                    "creator":"/user/wikimapper",
                    "timestamp":"2013-07-11T15:20:32.000Z"
                },
                {
                    "text":"Joker",
                    "lang":"en",
                    "id":"/m/04zxvhs",
                    "creator":"/user/wikimapper",
                    "timestamp":"2013-07-11T16:58:37.000Z"
                },
                {
                    "text":"Arkham Asylum: A Serious House on Serious Earth",
                    "lang":"en",
                    "id":"/m/0b7hyw",
                    "creator":"/user/wikimapper",
                    "timestamp":"2013-07-11T19:26:54.000Z"
                }
            ],
            "count":6.0
    },
    "/book/book_subject/works":{...},
    "/comic_books/comic_book_character/cover_appearances":{...},
    ... 
}
}

我想破译这个,以便我可以获得相关信息,例如,"/book/book_character/appears_in_book" 本身是响应属性,我想要的唯一值是“ text”和“id”,例如"text":"蝙蝠侠:第一年""id":"/m/0hzz_1h"。 由于响应没有固定的属性,并且可能会根据响应 ID 而变化。我如何在 java 类中隐藏这个 JSON 响应,我可以将“/book/book_character/appears_in_book”存储为一个序列化类并包含具有 idtext 等值的集合和 appears_in_book 作为类的名称变量。

我考虑过GSON 这样做。由于属性名称不是常量,我不能使用它将 JSON 转换为 Java 对象。目前我正在通过硬编码迭代每个属性并将它们填充到java变量中。

如果有人可以提供有效的方法,我将不胜感激。

【问题讨论】:

  • 正如@Shawn 建议的那样,我使用 json-lib-2.4 对其进行了解析,但我仍然必须从 JSONArray 中手动提取“文本”和“id”,我觉得必须有一些更好的方法来做它!

标签: java json google-api freebase mql


【解决方案1】:

您可以在 Java 中使用反射动态地执行此操作,但这是 Java 的一项高级功能,它可能会使您的代码变得比需要的更复杂。

见:Dynamically create an object in java from a class name and set class fields by using a List with data

一个更简单的替代方法是将 JSON 解析成一堆嵌套的 Maps 和 Lists,就像它们在 JSON 数据中给出的那样。

见:How to parse JSON in Java

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    相关资源
    最近更新 更多