如何通过GSON实现对象数组的正确JSON序列化与反序列化?
Gson转换对象数组为JsonArray的类型问题及反序列化困扰
我最近在使用Gson处理对象数组转JsonArray时碰到了麻烦,情况是这样的:我有一个对象数组,里面包含某个函数可接收的所有参数值,数组元素可以是任意复杂的对象。我写了下面这段代码来实现转换:
private JsonArray createArgsJsonArray(Object... argVals) { JsonArray argsArray = new JsonArray(); Arrays.stream(argVals).forEach(arg -> argsArray.add(gson.toJson(arg))); return argsArray; }
但这段代码的问题在于,它会把所有参数值都当成字符串来处理,生成的JSON示例是这样的:
"args":[""STRING"","1251996697","85"]
可我期望的输出是保留参数原本的类型,比如字符串不带额外转义、数字是数值类型,像这样:
"args":["STRING",1251996697,85]
之前我用org.json实现过符合预期的效果,但它没办法处理复杂对象,所以还是想基于Gson来解决这个问题。
后来我尝试了@Michał Ziober提供的解决方案,结果又遇到了反序列化的问题,我写了一段示例代码来复现:
Gson gson = new Gson(); Object strObj = "'"; JsonObject fnObj = new JsonObject(); JsonObject fnObj2 = new JsonObject(); fnObj.add("response", gson.toJsonTree(strObj)); fnObj2.addProperty("response", gson.toJson(strObj)); System.out.println(gson.fromJson(fnObj.toString(), Object.class)); // 输出 {response='} 这不是我想要的结果! System.out.println(gson.fromJson(fnObj2.toString(), Object.class)); // 输出 {response="\u0027"}
内容的提问来源于stack exchange,提问作者user2761431
相关产品推荐
相关产品推荐

