【问题标题】:GSON Only parsing object nameGSON 仅解析对象名称
【发布时间】:2013-07-08 20:02:25
【问题描述】:

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

我得到的唯一输出是

[词汇表]

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

谢谢。

【问题讨论】:

  • 第二个 JSON 对象相当复杂。你期待什么输出?
  • 您的第二个对象只有一个键 (glossary) 和该键的一个值(包含所有其他内容的对象)。
  • 我想要做的是在不知道键名的情况下获取值。因此,使用上面的第二个 json 示例,我希望能够执行类似 pseudo-code 之类的操作,然后是 ID 等,带有某种循环。 for(int i=0;i

标签: java json object key


【解决方案1】:

JSON 对象(包含"glossary")比Map 更复杂。可以转换为 Java Map&lt;String, String&gt; 的 JSON 对象示例如下:

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

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

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

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

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

等等……

【讨论】:

  • 哇,谢谢!这正是我正在寻找的东西,我只是不知道如何问它。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
相关资源
最近更新 更多