GSON仅解析对象名称

时间:2013-07-08 20:02:26

标签: java json object key

我正在尝试用GSON解析JSON,我想我已经掌握了它。我遇到的问题似乎是在对象名称之后停止解析。

    public static void main(String[] args) throws Exception {
    Gson gson=new Gson();
    String json = "{\"k1\":\"v1\",\"k2\":\"v2\"}";
    Map<String,String> map=new HashMap<String,String>();
    map=(Map<String,String>) gson.fromJson(json, map.getClass());
    System.out.println(map.keySet());
}

工作正常并输出:

[k1,k2]

我可以使用这些键来获得正常的值,这就是我想做的事情。

如果我使用与json.org中的这个JSON对象相同的代码

{
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }
}

我得到的唯一输出是

[词汇表]

我觉得有一些明显的东西我不知道了,有人可以帮助我指出正确的方向吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

JSON对象(包含"glossary")比Map更复杂。可以转换为Java Map<String, String>的JSON对象的示例是:

{"key1": "value1", "key2": "value2", "key3": "value3"}

但是,在示例JSON对象中,有一个字符串键,其值为JSON对象,而不是String,它不会转换为Map<String, String>

{"key": {"anotherKey": "some value"}}

Gson主页here有一个例子。要正确反序列化您的示例,您必须使用JsonParserGson的组合。例如,

String jsonObject = "your example";
JsonParser parser = new JsonParser();
JsonObject obj = parser.parse(jsonObject).getAsJsonObject();
JsonObject glossary = obj.get("glossary");

等...