阅读GSON以获取顶级标签列表

时间:2014-11-19 22:04:06

标签: java json gson

我有以下内容(为SO混淆)JSON:

{
 "ABC" : {
  "logo_1": {
    "hdpi": "value",
    "mdpi": "value",
    "xhdpi": "value",
    "xxhdpi": "value"
  },
  "logo_2": {
    "regular": "value",
    "high_res": "value",
  }
},
"XYZ" : {
  "logo_1": {
    "hdpi": "value",
    "mdpi": "value",
    "xhdpi": "value",
    "xxhdpi": "value"
  },
  "logo_2": {
    "regular": "value",
    "high_res": "value",
  }
} 

ABC和XYZ是地区。我们每个地区需要不同的徽标,我遇到的问题是我希望将来能够处理新的地区。因此,我不想创建如下对象:

public class EnvoyMessagesModel {

    public Region ABC;
    public Region XYZ;

}

我见过在Gson中使用的列表,但列表变量的名称始终是实际标签,因为“ABC”!=“XYZ”我认为这不会起作用。有没有办法获得这些区域的列表,这些区域也会知道他们的顶级标签?我想做像region.getTopLevel()这样的东西并让它返回“ABC”或“XYZ”

1 个答案:

答案 0 :(得分:1)

假设......

  • 地区名称都不同。
  • 给定区域中的徽标名称都不同。
  • 徽标在给定徽标中的属性名称都不同。

...解析你可以想到的JSON最灵活的方法就是使用Map类。类似的东西:

Type mapType = 
    new TypeToken<Map<String, Map<String, Map<String, String>>>>() {}.getType();

HashMap<String, HashMap<String, HashMap<String, String>>> regionsMap = 
    new Gson().fromJson(yourJsonString, mapType);

然后,如果你想获得所有的地区名称,你可以这样做:

Set<String> regionNames = regionsMap.keySet();

...或者如果您想要区域"regular"的徽标"logo_2"的值"XYZ",则可以执行...

String regular = regionsMap.get("XYZ").get("logo_2").get("regular");

......等等......