出现这个错误的原因是net.sf.json.JSONArray或JSONObject转换时,对象内包含另一个对象,而该被包含的对象为NULL,所以抛出异常。一种解决办法是将json字符串里的null去掉,但是觉得有点繁琐,之后看到可以用fastjson解决。
用fastjson处理之后的数据,其包含null的键值对是删去了的。
fastjson的remove方法替换了net.sf.json的discard方法,通过输出看到remove方法返回的好像是被移除的那个数据,但是将remove返回值放进组里的时候,确实原数据移除对应数据后的值。。。
for (int i = 0; i < sectionsArray.size(); i++) { JSONObject jsonObject = (JSONObject) sectionsArray.get(i); System.out.println("jsonObject: " + jsonObject); System.out.println("111:" + jsonObject.remove("contents") ); // JSONObject jsonObject2 = (JSONObject) jsonObject.remove("contents"); // JSONObject jsonObject2 = (JSONObject) jsonObject.discard("contents"); jsonObject.remove("contents"); // jsonArray1.add(jsonObject2); jsonArray1.add(jsonObject); }
令我奇怪的是我的后台数据是这样的(用json在线解析工具比较好看(
[{"数据结构简介":[{"createUserId":37,"submitTime":1584147431000,"chapterId":1,"sectionsName":"数据结构简介","id":1,"keyWord":"数据结构"},{"createUserId":0,"chapterId":1,"sectionsName":"数据结构算法","id":2,"keyWord":"数据结构算法"},{"createUserId":0,"chapterId":1,"sectionsName":"数据结构渐进分析","id":3,"keyWord":"时间复杂度"}]},{"数组":[{"createUserId":0,"chapterId":2,"sectionsName":"指针","id":4,"keyWord":"指针"},{"createUserId":0,"chapterId":2,"sectionsName":"结构体","id":5,"keyWord":"结构体"}]},{"链表":[]},{"堆栈":[]},{"队列":[]},{"树":[]},{"图":[]},{"查找":[]},{"排序":[]}]
但是传到前台后,确是这样的,多了序号作为其key值,这样子前端处理时就麻烦了很多。不知道有什么解决办法。
- 0: {数据结构简介: Array(3)}
- 1: {数组: Array(2)}
- 2: {链表: Array(0)}
- 3: {堆栈: Array(0)}
- 4: {队列: Array(0)}
- 5: {树: Array(0)}
- 6: {图: Array(0)}
- 7: {查找: Array(0)}
- 8: {排序: Array(0)}