2

我是初学者 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 之后,我可能能够弄清楚这一点。主题下的颜色可以或多或少{紫色,橙色,随便}。我只需要这些主题的列表,就我而言,我不需要知道每个主题的语言。

感觉这个问题正在变成一本书。我已经进行了广泛的搜索并且讨厌提出问题,但我很困惑。提前致谢。

4

1 回答 1

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);

您的语言列表将位于:

data.getLang();

的主题列表将位于:

data.getThemes().keySet();

我建议你看看Gson 文档。它非常简短明了,您会更好地理解所有内容...

于 2013-05-13T21:09:44.263 回答