使用Gson解析动态JSON数据

时间:2013-05-13 20:39:48

标签: java json gson

我是初学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之后我可能能够解决这个问题。在主题下是颜色,可以或多或少{紫色,橙色,无论}。我只需要一份这些主题的清单,就我而言,我不需要知道每种主题的语言。

感觉这个问题变成了一本书。我广泛搜索过,讨厌提问,但我很难过。提前谢谢。

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。它非常简短明了,你会更好地理解一切......