2013-05-25 31 views
5

我是java/Android的初学者,我尝试使用Gson解析JSON。Gson with dynamic name(Android)

我在文件部分有一些困难。 从我读过,我应该使用MapHash,但我不知道如何在这段代码

这里我主要的类使用它

InputStream source = retrieveStream(url); 
Gson gson = new Gson(); 
Reader reader = new InputStreamReader(source); 
SearchResponse response = gson.fromJson(reader, SearchResponse.class); 

是做解析类

public class SearchResponse { 

    public List<Podcast> podcasts; 

    class Podcast { 

     @SerializedName("files") 
     private List<File> files; 

     @SerializedName("format") 
     private String format; 

     @SerializedName("title") 
     private String title; 

    class File { 
     private String ValueX; 
     private String URLX; 
     } 
    } 
} 

JSON结构

{ 
"podcasts": [ 
    { 
    "files": [ 
     {"NameA": "ValueA"}, 
     {"NameB": "ValueB"}, 
     {"...": "..."} 
    ], 
    "format": "STRING", 
    "title": "STRING" 
    } 
    ] 
} 

感谢您的帮助

这里的JSON的结构的编辑过的文件我尝试解析 http://jsontest.web44.net/noauth.json

+0

您可以解析JSON即使不使用GSON。你想从JSONObject中获得什么? –

+0

我想获得名称和值。 – Keven

+0

Yourere有你的JSON对象,这可能是来自某个地方的回应? –

回答

5

在你File类,你有2个属性:ValueXURLX。但是,在你的JSON你有2场NameANameB ...

名在JSON响应和你的类必须匹配,否则你不会得到任何价值...

除此之外,你的类结构看起来不错,和你的deseralizing代码看起来一样好......我不认为你需要任何HashMap ...


编辑:考虑到你的意见,你可以使用一个HashMap。你可以通过改变你的Podcast类:

@SerializedName("files") 
private List<Map<String,String>> files; 

,你应该得到它正确分析。

你必须使用一个List因为你有一个JSON阵列(由[ ]包围),然后你可以使用Map允许不同的字段名。

请注意,您必须删除您File类...

+0

但名称和值是随机的。我编辑了我的帖子以反映这一点。我已经把一个文件,以显示如何结构的JSON http://jsontest.web44.net/noauth.json – Keven

+0

@Keven请参阅编辑 – MikO

+0

谢谢我也发现我的答案http://stackoverflow.com/questions/7651953 /除了我的gson-parsing-dynamic-json-field就像你说的那样 – Keven