2011-08-18 42 views
0

我想在Android中使用Gson解析JSON feed。我知道JSON是有效的。我懷疑這是因爲該格式是這樣的:在Android上使用Gson在JSON中使用「Dotting」

"Info":[ 
{ 

"Id":"", 
"Name":"", 
"Description":"", 
"Date":"" 
} 

爲了分析這個,我需要在防爆「點」:Info.Name

我怎樣才能做到這一點的序列化的DTO ?

@SerializedName("Name") 
public String name; 

@SerializedName("Description") 
public String desc; 

@SerializedName("Date") 
public String date; 

我試圖把「信息」。在每個serializedName的前面,但是這也不起作用。我也知道我的JSON解析方法正常工作,因爲它在其他地方使用了不同的DTO。但在解析中,我不必「點」問題。

任何人都可以幫忙嗎?

編輯:我已經嘗試了你們發佈的一切,並沒有任何作品。錯誤說:

The JsonDeserializer failed to deserialize json object {"Info":[{"....... 

第二個編輯: 我能夠擺脫錯誤的,但現在它返回null。哈哈,現在變得非常沮喪!

+0

你想你的json代碼到一個Java對象並訪問成員?我有點困惑你的問題。 – dbrettschneider

+0

是的,這是正確的。它適用於我的其他JSON解析在我的應用程序,但不是當我必須「點」從json飼料 – Magnus

回答

0

我假設你正在進食的實際JSON是有效的,因爲你提供的例子不是。在你的JSON例子中,你有"Info":[,但是沒有包含「Info」屬性的外部對象,這是必須的。有效JSON是:

{ 
"Info": [ 
      { 
      "Id":"", 
      "Name":"", 
      "Description":"", 
      "Date":"", 
      } 
     ] 
} 

這是有一個屬性「信息」,它具有的值是一個對象列表的JSON對象。該對象列表包含一個具有屬性「Id」,「Name」,「Description」和「Date」的對象,它們都具有空字符串值。

下面是關於如何使用GSON解析一個JSON飼料如上述JSON的快速教程:

您將需要一個類來表示在列表中的項目:

public class InfoItem { 
    public String Id; 
    public String Name; 
    public String Description; 
    public String Date; 
    public InfoItem() {} 
} 

而且一個來表示項目列表:

public class InfoItemList extends LinkedList<InfoItem> { 
    public InfoItemList() { super() }; 
} 

這增加了複雜性,因爲GSON無法從類數據中獲取泛型集合的類型。

而一個代表整體JSON消息:

public class InfoMessage { 
    public InfoItemList Info; 
    public InfoMessage() {}; 
} 

然後就是:

gson.fromJson(jsonString, InfoMessage.getClass()); 

如果只是反序列化的集合:

Type listType = new TypeToken<List<InfoItem>>() {}.getType(); 
gson.fromJson(jsonString2, listType); 
+0

是的,JSON是有效的,只是不想粘貼整個事情。我會嘗試這個並報告回來。 – Magnus

+0

@Raijv M. InfoItemList類是否應該擴展Collections?它要求我更改爲Collections或創建類Collection ? – Magnus

+0

@Magnus對不起,不應該是集合,因爲這是抽象的。我改變它來擴展LinkedList ,因爲這是具體的。讓我知道這是否適合你。 –

0

信息對象是一個列表,因爲[]。你必須使用下面的代碼deserialze它:

編輯:

public class Info { 
    // as in your question 
    public String name; 
    ... 
} 
public class Data { 
    @SerializedName("Info") 
    public List<Info> info; 
} 

然後,只需使用數據類反序列化您的JSON。

+0

確定的值,同時考慮到這一點,這可能是錯誤的,我說,我必須驗證它。 – dbrettschneider