【问题标题】:Adding JsonArray to JsonObject generated escape characters (gson)将 JsonArray 添加到 JsonObject 生成的转义字符(gson)
【发布时间】:2015-04-14 13:36:23
【问题描述】:

我正在使用GSON 库来创建一个 json 对象并向其添加一个 json 数组。我的代码如下所示:

JsonObject main = new JsonObject();
main.addProperty(KEY_A, a);
main.addProperty(KEY_B, b);

Gson gson = new Gson();
ArrayList<JsonObject> list = new ArrayList<>();
JsonObject objectInList = new JsonObject();
objectInList.addProperty(KEY_C, c);
objectInList.addProperty(KEY_D, d);
objectInList.addProperty(KEY_E, e);
list.add(objectInList);
main.addProperty(KEY_ARRAY,gson.toJson(list));

输出似乎包含一些意外的斜线:

{"A":"a","B":"b","array":["{\"C\":\"c\",\"D\":\"d\",\"E\":\"e\"}"]}

【问题讨论】:

  • this 对您有帮助吗?引用:“您需要向 Gson 提供有关您正在使用的 List 的特定泛型类型(或您使用的任何泛型类型)的信息。”
  • main.addProperty(KEY_ARRAY,gson.toJson(list,new TypeToken&lt;List&lt;JsonObject&gt;&gt;(){}.getType())); 不幸的是没有区别
  • Hmm... 实际上,在我看来,斜杠用于转义数组值中的双引号字符,因为 \" 是 java 和 C 中双引号的转义字符。基本上,如果你打印输出中的值,应该没问题。检查this

标签: java android json gson


【解决方案1】:

当你这样做时:

main.addProperty(KEY_ARRAY, gson.toJson(list));

您在JsonObject 中添加了一个键值对String -&gt; String,而不是String -&gt; JsonArray[JsonObject]

现在你得到了这个斜杠,因为当 Gson 将此 List 序列化为一个字符串时,它会将有关 json 对象中的值的信息保存在数组中(即字符串,因此引号需要通过反斜杠进行转义)。

你可以通过设置来观察同样的行为

Gson gson = new GsonBuilder().setPrettyPrinting().create();

那么数组的输出是:

"array": "[\n  {\n    \"C\": \"c\",\n    \"D\": \"d\",\n    \"E\": \"e\"\n  }\n]"

但是您要寻找的是正确的映射,您需要使用add 方法并给出JsonArray 作为参数。因此,将您的 list 更改为 JsonArray

JsonArray list = new JsonArray();

并使用add 而不是addProperty

main.add("array", list);

你会得到输出:

{"A":"a","B":"b","array":[{"C":"c","D":"d","E":"e"}]}

【讨论】:

  • 解决了!谢谢
猜你喜欢
  • 2016-12-03
  • 2012-08-21
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
相关资源
最近更新 更多