【发布时间】:2020-04-03 10:16:42
【问题描述】:
我正在尝试使用 Java 中的 Gson 库解析下面的 Json。当使用其他语言(例如 C#)时,此 JSON 被解析为一个数组,但 Gson 似乎将其转换为一组 java 属性(老实说,这对我来说更有意义)。有谁知道我是否可以改变 Gson lib 的这种行为?
{
"Outer": {
"0": {
"Attr1": 12345,
"Attr2": 67890
},
"1": {
"Attr1": 54321,
"Attr2": 09876
}
}
}
以下代码演示了 Gson 如何将数组解析为 JsonObject。需要明确的是,我意识到我已经将outer 引用为JsonObject,但我这样做只是为了演示代码。如果我尝试将outer 引用为JsonArray,代码将失败。
String json = "{\"Outer\": { \"0\": { \"Attr1\": 12345, \"Attr2\": 67890 }, \"1\": { \"Attr1\": 54321, \"Attr2\": 09876 }}}";
Gson gson = new GsonBuilder()
.disableHtmlEscaping()
.setLenient()
.serializeNulls()
.create();
JsonObject jo = gson.fromJson(json, JsonObject.class);
JsonObject outer = jo.getAsJsonObject("Outer");
System.out.println(outer);
System.out.println(outer.isJsonArray());
结果:
{"0":{"Attr1":12345,"Attr2":67890},"1":{"Attr1":54321,"Attr2":"09876"}}
false
//编辑
我以这个当前的简单 Json 为例,但是我对这段代码的应用将是解析形状不同且未知的 Json。因此,我需要 Gson 自动将其解析为数组,以便 isJsonArray 返回 true。
【问题讨论】:
-
其实你的 JSON 不是一个数组,它是一个对象内部的一个数组。 isJsonArray() 用 String json = "\"[Outer\": { \ [...] }] 返回什么?
-
那将是一个数组。有人告诉我,上面的示例将由 JavaScript 和 c# lib 解析为数组,我正在尝试使用 Gson 在 java 中复制该行为。
-
也许我不理解你,但据我所知,Js 不会将你的示例 json 解析为数组,而是解析为具有两个参数的对象:imgur.com/vxL043G
-
我同意@CarlosLópezMarí,但显然 JavaScript 和 c# 将其解析为一个数组,我试图在 Java 中模仿它。
-
我粘贴的图片来自 Javascript。