0

我正在尝试使用 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"
                }
            }
        }
    }
}

我得到的唯一输出是

[词汇]

我觉得我缺少一些明显的东西,有人可以帮我指出正确的方向吗?

谢谢你。

4

1 回答 1

1

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

{“key1”:“value1”,“key2”:“value2”,“key3”:“value3”}

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

{“key”:{“anotherKey”:“某个值”}}

这里有一个来自 Gson 主页的示例。要正确反序列化您的示例,您必须使用JsonParser和的组合Gson。例如,

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

ETC...

于 2013-07-08T21:01:27.880 回答