使用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
相关产品推荐
相关产品推荐

