问题描述
需要将Java对象类数据输出为Json文件格式数据,采用fastjson2开源插件,在使用过程,出现数组越界问题,异常信息如下:
java.lang.ArrayIndexOutOfBoundsException: 18432
at com.alibaba.fastjson2.JSONWriterUTF16.startObject(JSONWriterUTF16.java:106)
at com.alibaba.fastjson2.writer.ObjectWriter9.write(ObjectWriter9.java:79)
at com.alibaba.fastjson2.writer.ObjectWriterImplCollection.write(ObjectWriterImplCollection.java:176)
at com.alibaba.fastjson2.writer.FieldWriterObject.write(FieldWriterObject.java:352)
at com.alibaba.fastjson2.writer.ObjectWriter11.write(ObjectWriter11.java:90)
at com.alibaba.fastjson2.JSON.toJSONString(JSON.java:2742)
转换为json的数据类MyObject:
class MyObject
{
private List<Integer> intList = new ArrayList<>();
private Set<String> strSet = new HashSet<>();
private Set<Object> objSet = new HashSet<>();
public MyObject(){}
}
原因分析:
在将MyObject转换为json格式文件时,将数据以字符形式转换为数组,需要计算数组的长度,如果MyObject中的属性出现null时,会导致数组长度计算异常,从而导致存储json字符数组是长度越界异常。
解决方案:
有两种解决方法:
1、如果使用JSON.toJSONString(MyObject)转换为json格式String,则需要保证MyObject中及其保存的对象不为null,例objSet为null或者objSet中存在null均会导致异常;
2、配置对空的处理方式,JSON.config(Feature.NullAsDerfaultValue),根据空值类型配置空值的处理方式。
通过以上两种解决方法结合可以处理越界情况。
以上方法为自己探索解决方法,可能存在不足和错误之处,还请海涵和指正,如有更好方法,欢迎交流!