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

如何将嵌套字符串数组列表转为字符串?Gson转换异常及替代方案

问题分析与解决方案

你的代码逻辑本身没问题,正常情况下Gson完全可以把ArrayList<String[]>序列化为嵌套的JSON数组。出现内存地址输出的情况,大概率是两个原因:

  • 实际运行时result集合里的元素并非真正的String[],比如myObj.foo()返回的集合实际存储的是Object[],被你强转为ArrayList<String[]>,Gson序列化时会调用数组的默认toString()方法,就会输出[Ljava.lang.String;@xxx这种格式。
  • 使用的Gson版本过旧,存在数组序列化的兼容问题。

排查步骤

  • 先循环打印result中每个元素的实际类型,确认是否为String[]:
for (String[] arr : result) {
    System.out.println(arr.getClass().getName());
}

如果输出不是java.lang.String[],说明类型强转有问题,需要修正myObj.foo()的返回逻辑。

  • 升级Gson到最新稳定版(比如2.10.1),旧版本可能对数组嵌套序列化支持不佳。

替代Gson的方案

1. 使用Jackson序列化

Jackson对数组和集合的序列化支持同样可靠:

import com.fasterxml.jackson.databind.ObjectMapper;

// ObjectMapper建议全局单例初始化
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(result);
return json;

2. 手动拼接JSON(仅适合简单场景)

如果不想引入第三方库,可以手动拼接JSON字符串(注意处理转义字符):

StringBuilder sb = new StringBuilder("[");
for (int i = 0; i < result.size(); i++) {
    String[] arr = result.get(i);
    sb.append("[");
    for (int j = 0; j < arr.length; j++) {
        // 转义字符串中的双引号
        String escapedStr = arr[j].replace("\"", "\\\"");
        sb.append("\"").append(escapedStr).append("\"");
        if (j != arr.length - 1) {
            sb.append(",");
        }
    }
    sb.append("]");
    if (i != result.size() - 1) {
        sb.append(",");
    }
}
sb.append("]");
return sb.toString();

内容的提问来源于stack exchange,提问作者Lyrk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:57:34