出现这个问题原因主要是同一对象重复引用,并重复赋值
一般在for循环中很可能会出现
这里的JSONObject在循环体外声明,所以每执行一次循环,JSONObject对象会被重复引用
,一般用过其他语言的人,可能会觉得后面JSONObject的重新赋值不会影响之前已经赋给JSONArray数组的值。*
解决方法就是将循环体中要用JSONObject对象在循环体内声明,这样每次循环引用的JSONObject对象就都是新的
//将要保存的JSON对象放在循环里面
JSONArray JS=new JSONArray();
for (int i=0;Arrays.size()>i;i++){
JSONArray body=new JSONArray();
JSONObject entity=new JSONObject();
JSONObject Entity=new JSONObject();
JSONObject head=new JSONObject();
//毫无用处
JSON.toJSONString(head, SerializerFeature.DisableCircularReferenceDetect);
//先取表头
head=Arrays.getJSONArray(i).getJSONObject(0);
//放入最终JSON对象
entity.put("ic_purchasein_h",head);
//再取表体
body = Arrays.getJSONArray(i);
/**
* 重点!!!! 如果不再转换一次JSONArray的话会报错:{"ref":"ref":"[0]"}
* */
body = JSONArray.parseArray(body.toString());
entity.put("ic_purchasein_b",body);
JS.add(entity);
}
还有一种情况也是困扰我很久的一个问题
我的Body本来就是JSONArray,开始我并没有去重新转换JSONArray,于是有下面的错误
解决方法:将得到的JSON数组重新转换一次
下面是重新转换JSON数组的代码
ic_purchasein_h没有报 “
r
e
f
"
:
"
ref":"
ref":"[0].ic_purchasein_b[0]” 的错误了
2021/9/14
第一次写博客,记录一下问题,也帮助一些遇到跟我一样问题的童鞋