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

使用Jettison生成JSON时数组输出格式异常问题求助

解决Jettison生成JSON数组格式异常的问题

你遇到的问题是Jettison生成的JSON里,数组被错误序列化为带转义的字符串,而非原生JSON数组。这通常是序列化逻辑或使用方式的小问题,下面是具体解决步骤:

1. 调整对象属性的添加顺序

你的代码里先把空JSONObject放入JSONArray,再给对象加属性。虽然Java引用模型下这逻辑可行,但部分JSON库对这种操作的序列化处理可能出异常。建议先给对象添完所有属性,再放入数组:

public static void main(String[] args) throws Exception {
    JSONObject root = new JSONObject();
    JSONArray array = new JSONArray();
    for (int i=0; i<5; i++) {
        JSONObject o = new JSONObject();
        // 先添加属性
        o.put("name", "leandro-" + i);
        o.put("age", i*2);
        // 再放入数组
        array.put(o);
    }
    root.put("Nomes", array);
    // 调用toString()方法输出,而非直接打印对象
    System.out.println(root.toString());
}

2. 确保使用正确的Jettison包导入

确认代码导入的是Jettison官方的JSON类,避免和其他JSON库的同名类冲突:

import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONObject;

3. 使用带格式化的toString方法输出

Jettison的JSONObject提供了带缩进参数的toString(int indentFactor)方法,既能输出易读的格式化JSON,还能规避部分序列化转义问题:

// 输出带2个空格缩进的JSON
System.out.println(root.toString(2));

4. 检查Jettison版本

如果以上方法无效,可能是你用的Jettison版本存在bug。建议升级到较新的稳定版本(比如1.3.8或更高),新版本修复了不少序列化相关问题。

执行后你会得到预期的JSON输出,示例如下:

{
  "Nomes": [
    {"name": "leandro-0", "age": 0},
    {"name": "leandro-1", "age": 2},
    {"name": "leandro-2", "age": 4},
    {"name": "leandro-3", "age": 6},
    {"name": "leandro-4", "age": 8}
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:32:36