2012-08-19 103 views
1

我無法與谷歌的GSON解析以下JSON:解析JSON:直接讀取值從子對象

{"Name": 
    {"object1": 
     {"field1":"17", 
     "field2":"360", 
     "field3":"19", 
     "field4":"sun", 
     "field5":"rain" 
     } 
    } 
} 

我曾嘗試以下得到的字段1的值,但它不」 t work

@SerializedName("Name/object1/field1") 
public int fieldOne; 

我在做什麼錯?

+1

+1。有趣的是,Gson似乎沒有像'@SerializedName(「Name/object1」)''或'@SerializedName(「Name.object1」)''這樣的符號直接從子對象獲取值。 – Jonik 2013-10-25 15:16:17

+0

(順便說一句,刪除Android標記,因爲這不是Android特定的。) – Jonik 2013-10-25 15:19:58

回答

3

你的對象必須保存你的json指令的層次結構。對於你的榜樣,它會是這樣的:

public class Object { 

    @SerializedName("field1") 
    public String fieldOne; 

    @SerializedName("field2") 
    public String fieldTwo; 

    @SerializedName("field3") 
    public String fieldThree; 

    @SerializedName("field4") 
    public String fieldFour; 
} 

public class Name { 

    @SerializedName("object1") 
    public Object obj; 
} 

public class GsonObj { 

    @SerializedName("Name") 
    public Name name; 
} 

使用下面的電話:

String json = "{\"Name\":{" + 
      "\"object1\":{" + 
      "\"field1\":\"17\",\"field2\":\"360\",\"field3\":\"19\",\"field4\":\"sun\",\"field5\":\"rain\"}}}"; 

Gson gson = new Gson(); 
GsonObj jsonResult = gson.fromJson(json, GsonObj.class); 
Log.d("test", "field one: "+jsonResult.name.obj.fieldOne); 
Log.d("test", "field two: "+jsonResult.name.obj.fieldTwo); 
Log.d("test", "field three: "+jsonResult.name.obj.fieldThree); 
Log.d("test", "field four: "+jsonResult.name.obj.fieldFour); 
1

您的JSON無效。 JSON可能以{或[開頭]開頭,所以你需要用另一對{}包裝你的字符串。

一個好的做法是首先檢查您的數據。我經常在這裏使用這個: http://jsonlint.com/

+0

對不起,我錯過了那些括號,我確實有 – Dave 2012-08-19 19:42:06

+0

你仍然錯過1個括號。就在最後。 – 2012-08-19 19:44:45

+0

嗯仍然不能正常工作 – Dave 2012-08-19 19:46:08