将JsonArray添加到JsonObject生成的转义字符(gson)

时间:2015-04-14 13:36:24

标签: java android json gson

我使用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\"}"]}

1 个答案:

答案 0 :(得分:10)

当你这样做时:

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

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

现在你得到这个斜杠,因为当Gson将此List序列化为一个String时,它会保存有关数组中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"}]}