2014-02-07 73 views
0

我一直在試圖用此溶液How to find specified name and its value in JSON-string from Java?如何獲得通過的關鍵

沿着沿然而似乎有道理它不會從GSON對象的值。

我從一個字符串定義一個新的GSON對象:字符串的

這裏舉例:http://api.soundrop.fm/spaces/XJTt3mXTOZpvgmOc

public void convertToJson() 
{ 
    Gson gson = new Gson(); 
    Object gsonContent = gson.fromJson(stringContent, RadioContent.class); 
} 

然後嘗試並返回一個值:

public Object getValue(String find) 
{ 
    return gsonContent.find; 
} 

最後它與所謂的:

public static void print(String find = "title") 
{ 
    Object value = radioContent.getValue(find); 

    System.out.println(value); 
} 

但是我得到一個錯誤:

java: cannot find symbol 
    symbol: variable find 
    location: variable gsonContent of type java.lang.Object 

全類: 主類:http://pastebin.com/v4LrZm6k 廣播類:http://pastebin.com/2BWwb6eD

+0

第一次去json.org所和學習JSON語法。有兩種類型的JSON結構,「對象」和「數組」。一切都是通過將這些層疊在一起而建立的使用鍵訪問的「對象」,使用數字索引訪問「數組」。根據您使用的工具包,「反序列化」JSON將被表示爲屬於您使用的JSON套件的普通舊Java地圖(「對象」)和列表(「數組」)或特殊的Map/List類類。 (重要的是要注意JSON「對象」與Java「對象」不同)。 –

+0

本質上,我想要做的就是獲取一個鍵的值。所以我猜對象就是我應該使用的東西。 – Nonnisi

+0

將JSON解析爲'JsonObject'並檢索您需要的字段。 –

回答

9

這就是Java。字段根據對象引用的聲明類型進行解析。

根據您的編譯器錯誤,gsonContentObject類型的變量。 Object沒有find字段。

你已經告訴GSON反序列化是什麼類型,所以才使gsonContent變量是類型

RadioContent gsonContent = gson.fromJson(stringContent, RadioContent.class); 

而且,好像你是一個局部變量陰影實例gsonContent領域。


你可以做以下以及

JsonObject jsonObject = gson.fromJson(stringContent, JsonObject.class); 
jsonObject.get(fieldName); // returns a JsonElement for that name 
+0

創建RadioContent的新實例會浪費大量資源嗎?由於其中大部分不會用於這種情況,我是否會明智地將find找到一個單獨的類,然後創建該新類的實例? – Nonnisi

+1

@Nonnisi這個'gson.fromJson(stringContent,RadioContent.class);'創建一個RadioContent實例,不管你分配給什麼。 –

+0

'public static void print(String find =「title」)'I added =「title」來簡化示例。 – Nonnisi