动态名称的Gson(Android)

时间:2013-05-25 21:56:05

标签: java android dynamic gson

我是java / Android的初学者,我尝试用Gson解析JSON。

我对文件部分有些困难。 根据我的阅读,我应该使用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

1 个答案:

答案 0 :(得分:5)

File课程中,您有2个属性:ValueXURLX。但是在您的JSON中,您有2个字段NameANameB ...

JSON响应中的名称和您的班级必须匹配,否则您将无法获得任何价值......

除此之外,你的班级结构看起来很好,你的解除代码看起来也很好......我认为你不需要任何HashMap ......


编辑:考虑到您的评论,您可以使用HashMap。您可以使用以下方式更改Podcast课程:

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

你应该正确解析它。

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

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