【问题标题】:Parsing Json Feeds with google Gson使用 google Gson 解析 Json Feed
【发布时间】:2011-01-03 07:51:27
【问题描述】:

我想知道如何按项目解析 JSON 提要(例如,每个项目的 url / 标题 / 描述)。我查看了 doc / api,但对我没有帮助。

这是我目前得到的

import com.google.gson.Gson;
import com.google.gson.JsonObject;

public class ImportSources extends Job {
    public void doJob() throws IOException {
        String json = stringOfUrl("http://feed.test/all.json");
        JsonObject jobj = new Gson().fromJson(json, JsonObject.class);
        Logger.info(jobj.get("responseData").toString());
    }
    public static String stringOfUrl(String addr) throws IOException {
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        URL url = new URL(addr);
        IOUtils.copy(url.openStream(), output);
        return output.toString();
    }
}   

【问题讨论】:

    标签: java json parsing gson


    【解决方案1】:

    取决于实际的 JSON 格式。实际上,您可以创建一个与 JSON 格式匹配的自定义 Javabean 类。 JSON 中的任何字段都可以映射为StringIntegerBoolean 等 Javabean 属性。任何数组都可以映射为List 属性。任何对象都可以映射为另一个嵌套的 Javabean 属性。它极大地简化了 Java 中的进一步处理。

    如果没有你身边的 JSON 字符串示例,它只是猜测它的外观,所以我不能在这里给出一个基本的例子。但是我之前在这里发布过类似的答案,您可能会发现它很有用:

    Gson 还有一个User Guide,你可能会发现它也很有用。

    【讨论】:

    • 感谢您的回答,我已尝试将示例应用于以下提要:stocktwits.com/streams/all.json。我没有设法获得除 null 之外的任何其他值。我需要创建两个组:流和推文吗?
    【解决方案2】:

    Gson 1.4 有一个新的 API JsonStreamParser,可以让您从一个流中一个一个地解析多个 JSON 对象。

    【讨论】:

      【解决方案3】:

      您可以为 json 对象创建相应的 java 类。整数、字符串值可以按原样映射。 Json 可以这样解析-

       Gson gson = new GsonBuilder().create();
       Response r = gson.fromJson(jsonString, Response.class);
      

      这是一个例子-http://rowsandcolumns.blogspot.com/2013/02/url-encode-http-get-solr-request-and.html

      【讨论】:

        【解决方案4】:

        我不知道 GSON 是否可以进行流式/增量绑定(我认为没有)。

        但是有特定的理由只考虑那个特定的库吗?其他 Java JSON 处理库确实允许进行此类处理(您可以查看其他答案的链接以了解一些想法),因为它在处理大型提要时非常重要。

        【讨论】:

        • 嗯,我使用 ROME 进行 RSS 提要,而我使用的框架包含 gson,这就是我尝试使用它的原因,但我对任何其他库都是开放的。
        • 好的。就像我说的,我认为 GSON 只做完整的文档绑定,但我不是 100%。作为替代方案,Jackson (jackson.codehaus.org) 确实允许增量绑定以及多种其他操作模式。工作方式是您需要为主要事物获取 JsonParser,迭代主要 JSON 数组或对象,并调用 parser.readValueAs() 进行实际绑定。如果文档没有足够的指针,用户邮件列表可以帮助提供详细信息。
        猜你喜欢
        • 2011-02-12
        • 2012-01-02
        • 1970-01-01
        • 1970-01-01
        • 2016-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多