我是初学Java和Gson用户,并且能够将其应用于我的需求。我现在有一些JSON数据需要解析到微调器中,如下所示:
{
"lang":[
"arabic",
"bengali",
"dutch-utf8",
"eng_root",
"english",
"english-utf8",
...
],
"themes":{
"blue":{
"chinese_ibm500":1,
"spanish":1,
"bengali":1,
"japanese":1,
"english":1,
"russian":1,
"french-utf8":1,
"eng_root":1,
"arabic":1,
"spanish-utf8":1,
"portuguese":1,
...
},
"green":{
"eng_root":1,
"engmonsoon":1,
"english":1
...
},
"red":{
"chinese_ibm500":1,
"spanish":1,
"bengali":1,
...
}
}
}
所以从这个JSON我需要两件事:
1)lang下的数组是动态的,就像服务器上安装的语言一样。我怎么能得到所有条目?
我有一个课程如下,但是在我返回lang
之后,我仍然坚持要做什么public class ListData {
private List<Language> lang;
public List<Language> getLang {
return lang;
}
public static class Language {
???
}
}
2)在理解1之后我可能能够解决这个问题。在主题下是颜色,可以或多或少{紫色,橙色,无论}。我只需要一份这些主题的清单,就我而言,我不需要知道每种主题的语言。
感觉这个问题变成了一本书。我广泛搜索过,讨厌提问,但我很难过。提前谢谢。
答案 0 :(得分:5)
1)为了获得"lang"
数组,只需修改
private List<Language> lang;
代表
private List<String> lang;
由于"lang"
数组中的元素都是字符串,因此您不需要任何类Language
来存储这些值,它们将被正确解析为字符串。并且数组包含多少个字符串并不重要......
2)为了解析"themes"
,你必须注意它不是一个数组[ ]
,而是一个对象{ }
,所以你需要用一些对象来解析它,这里最合适的类是这样的Map
:
private Map<String, Object> themes;
注意:正如您所说,您不需要"blue"
,"green"
等下的数据......您只需Object
作为值中的值类型地图,否则你需要一些课......
在此处使用Map
可让您在JSON响应中拥有任意数量的主题。
所以在摘要中,您只需要一个类:
public class ListData {
private List<String> lang;
private Map<String, Object> themes;
//getters & setters
}
并使用以下命令解析您的JSON:
Gson gson = new Gson();
ListData data = gson.fromJson(yourJsonString, ListData.class);
你的 langs 列表将在:
data.getLang();
您的主题列表将位于:
data.getThemes().keySet();
我建议你看看Gson documentation。它非常简短明了,你会更好地理解一切......