2012-04-03 49 views
2

我已經檢出了很多頁面,但大多數教程和腳本都返回了這種類型的JSON輸出的錯誤代碼。那麼,如何將能夠在Java中從該JSON提取數據?:如何從Java中的URL獲取JSON數據?

[ 
    { 
    "user":{"id":"1","username":"user1"}, 
    "item_name":"item1", 
    "custom_field":"custom1" 
    }, 
    { 
    "user":{"id":"2","username":"user2"}, 
    "item_name":"item2", 
    "custom_field":"custom2" 
    }, 
    { 
    "user":{"id":"3","username":"user3"}, 
    "item_name":"item3", 
    "custom_field":"custom3" 
    } 
] 
+0

您是否已經從URL下載了數據並想知道如何閱讀?或者你想知道如何首先下載它? – ArjunShankar 2012-04-03 13:50:33

+1

可能的重複:http://stackoverflow.com/questions/1688099/converting-json-to-java/1688182#1688182 – 2012-04-03 13:53:23

+0

許多庫希望將整個JSON內容封裝在{}中,以便嘗試包裝JSON數據在花括號裏。我通常使用json-lib來讀取它'JSONObject.fromObject(yourJsonString);' – luukes 2012-04-03 13:56:13

回答

1

如果要使用GSON,則首先聲明的類用於保持每個元素和子元素:

public class MyUser { 
    public String id; 
    public String username; 
} 

public class MyElement { 
    public MyUser user; 
    public String item_name; 
    public String custom_field; 
} 

然後聲明最外元件的陣列(因爲你的情況JSON對象是一個JSON陣列),併爲它分配:

MyElement[] data = gson.fromJson (myJSONString, MyElement[].class); 

然後你只需訪問data的元素。

要記住的重要一點是您聲明的屬性的名稱和類型應與JSON字符串中的屬性名稱和類型相匹配。例如「ID」, 「ITEM_NAME」 等

+0

我試圖使用這個,但它仍然出現錯誤,這裏是一個pastebin鏈接到我有:http://pastebin.com/nRiGqq9r如果我使用'MyElement []數據=新Gson()。fromJson jsonText,MyElement.class);'它會告訴我我需要將MyElement []更改爲MyElement,所以這也不起作用,我將如何使這個腳本工作? – Aronnn 2012-04-03 18:23:14

+0

@Aronnn - 在您的fromJson調用中,您分配給的類型應該是MyElement []。class',而不是'MyElement。類' – ArjunShankar 2012-04-04 08:23:07

+0

這裏是我的腳本與我得到的錯誤,我真的不能找出問題是什麼:http://pastebin.com/iR7ysMx6 – Aronnn 2012-04-04 11:31:23

0

如果您想序列化/反序列化JSON在Java中我會建議使用傑克遜。 http://jackson.codehaus.org/

一旦您下載了傑克遜,您可以將json字符串反序列化爲與JSON中的對象相匹配的對象。

Jackson提供的註釋可以附加到您的課堂,使反序列化非常簡單。

+0

我怎樣才能用jackson從這個JSON中獲取數據? – Aronnn 2012-04-03 14:07:13

0

你可以嘗試JSON簡單
http://code.google.com/p/json-simple/

例子:

JSONParser jsonParser = new JSONParser(); 
JSONArray jsonArray = (JSONArray) jsonParser.parse(jsonDataString); 

for (int i = 0; i < jsonArray.size(); i++) { 
    JSONObject obj = (JSONObject) jsonArray.get(i); 
    //Access data with obj.get("item_name") 
} 

只是要小心檢查空/小心鑄造等。