我正在尝试用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"
}
}
}
}
}
我得到的唯一输出是
[词汇表]
我觉得有一些明显的东西我不知道了,有人可以帮助我指出正确的方向吗?
谢谢。
答案 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有一个例子。要正确反序列化您的示例,您必须使用JsonParser
和Gson
的组合。例如,
String jsonObject = "your example";
JsonParser parser = new JsonParser();
JsonObject obj = parser.parse(jsonObject).getAsJsonObject();
JsonObject glossary = obj.get("glossary");
等...