2010-01-09 118 views
7

我想知道如何解析一个JSON饲料的项目(如每个项目的URL /标题/描述)。我看过doc/api,但它没有帮助我。解析与谷歌Gson的Json饲料

这是我走到这一步,

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

回答

9

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

从你身边没有JSON字符串的例子,它只是猜测它是怎么样的,所以我不能在这里给出一个基本的例子。但我以前在这里发布类似的答案,你会发现它有用:

GSON也有User Guide,你会发现它也是有用的。

+0

谢谢您的回答,我试图例子适用于下列饲料:http://www.stocktwits.com/ streams/all.json。我没有设法得到除null以外的任何其他值。我是否需要创建两个组:流和推文? – Roch 2010-01-11 11:10:53

0

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

但是,是否有特定的理由只考虑特定的图书馆?其他Java JSON处理库允许进行这样的处理(您可以检查其他答案对于某些想法的链接),因为它在处理大型提要时非常重要。

+0

那么我使用ROME的RSS提要,我使用的框架包含gson,这就是为什么我试图使用它,但我打开任何其他库。 – Roch 2010-01-11 11:04:18

+0

好的。就像我说的,我认为GSON只做全文档绑定,但我不是100%。 作为替代方案,Jackson(http://jackson.codehaus.org)确实允许增量绑定以及多种其他操作模式。 工作方式是,您需要为主要事物获取JsonParser,遍历主JSON数组或对象,然后调用parser.readValueAs()以进行实际绑定。 如果文档没有足够的指针,用户邮件列表可以帮助您了解详细信息。 – StaxMan 2010-01-12 05:25:27

3

Gson 1.4有一个新的API JsonStreamParser,它允许您从一个流中逐个解析多个JSON对象。