You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:58:39