动态名称的Gson(Android)

Kev*_*ven 5 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);
Run Code Online (Sandbox Code Playgroud)

进行解析的类

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

json结构

{
"podcasts": [
    {
    "files": [
        {"NameA": "ValueA"},
        {"NameB": "ValueB"},
        {"...": "..."}
    ],
    "format": "STRING",
    "title": "STRING"
    }
    ]
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

这是一个编辑过的JSon结构文件我尝试解析 http://jsontest.web44.net/noauth.json

Mik*_*ikO 5

在你的File班级中你有2个属性:ValueXURLX.但是在你的JSON中你有2个字段NameA并且NameB......

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

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


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

@SerializedName("files")
private List<Map<String,String>> files;
Run Code Online (Sandbox Code Playgroud)

你应该正确解析它.

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

请注意,您必须删除您的File班级...