2010-01-09 210 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對象。