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