1、内部类层次结构不对

假设有一个model类,代码如下:

public class Model {public Data data;public class Data {public List<Row> rows;}public class Row{}
}
注意虽然rows是Data的一个变量,但是类Row却是与Data同一层次,都是Model类的内部类。
这时如果需要解析的json如下:
{"code":0,"data":{"pageSize":20,"rows":[{"id":13}]}
}
使用FastJson进行解析的时候就会报出如下错误:
Exception in thread "main" com.alibaba.fastjson.JSONException: create instance error, class com.example.testand.Model$Ds
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.createInstance(JavaBeanDeserializer.java:89)
.
.
at com.example.testand.Demo.main(Demo.java:24)
Caused by: java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
.
.
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.createInstance(JavaBeanDeserializer.java:86)
... 16 more
将Row改成Data的内部类就会解决这一问题,代码如下:
public class Model {public Data data;public class Data {public List<Row> rows;public class Row{}}
}

2、直接用内部类解析

同样假设有一个model类,代码如下:
public class Model {public Data data;public class Data {public List<Row> rows;public class Row{}}
}
这时假设有一组Json数据,如下:
{"rows" : [{"id" : 1}]
}
如果我们使用下面的代码去解析数据
Data data = JSON.parseObject(jsonStr, Data.class);
同样会报错:
Exception in thread "main" com.alibaba.fastjson.JSONException: create instance error, class com.example.testand.Model$Data
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.createInstance(JavaBeanDeserializer.java:89)
.
.
at com.example.testand.Demo.main(Demo.java:25)
Caused by: java.lang.NullPointerException
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.createInstance(JavaBeanDeserializer.java:86)
... 7 more
这是因为直接使用了内部类去解析json。
我们知道一个非静态内部类,是不能直接进行实例化,如:
Model.Data data = new Model.Data()
编译会出错,如果我们想实例化非静态内部类,则必须要有一个外部类的实例,如:
Model model = new Model();
Model.Data data = model.new Date();
这样就解释了为什么上面的做法会出错,因为FastJson解析数据时会直接创建内部类Data的实例。
正确的方式是将Data类单独作为一个类,而不是内部类,如下:
model类
public class Model {public Data data;
}
data类
public class Data {public List<Row> rows;public class Row{}
}

使用FastJson解析时有关内部类的两个问题相关推荐

  1. java json 内部类_使用Fastjson解析内部类的一个小问题

    使用的Fastjson的版本是1.2.7和1.2.47两个版本. 1. 问题 使用Fastjson解析包含内部类的对象时,发生异常,代码大致如下: public class HelloControll ...

  2. fastjson解析json简介

    2019独角兽企业重金招聘Python工程师标准>>> 一.简介 阿里巴巴FastJson是一个Json处理工具包,是一个Java语言编写的高性能功能完善的JSON库.,包括&quo ...

  3. 使用Fastjson解析List对象时出现:{“$ref“:“$.data[0].task.OBJECTS[0]“}的问题原因及解决方法

    使用Fastjson解析List对象时出现:{"$ref":"$.data[0].task.OBJECTS[0]"}的问题原因及解决方法 参考文章: (1)使用 ...

  4. springmvc 配置 fastjson解析器

    解决方案 添加fastjson 解析器 pom文件中添加 <dependency><groupId>com.alibaba</groupId><artifac ...

  5. fastjson的值过滤器ValueFilter || fastjson输出字段为Null的两种

    使用fastjson序列化对象时,可以添加值过滤器(ValueFilter),以此来对序列化出来的值做统一处理,步骤如下: 实现com.alibaba.fastjson.serializer.Valu ...

  6. Java学习总结(二十)——JSON解析:官方解析,GSON解析,FastJSON解析,

    一.JSON简介: 1.JSON(javaScript Object Notation)是一种轻量级的数据交换格式: 2.JSON数据作为目前网络中主流的数据传输格式之一,应用十分广泛: 3.JSON ...

  7. fastjson解析多层数据_JSON数据如何进行解析呢,方式有哪些?

    问题:JSON数据如何进行解析呢,方式有哪些? 这个问题是我们作为程序员几乎每天都要进行的操作,那它有多少种方式呢,我们这里就这点来说一说. 解析的四种方式 官方解析 谷歌 Gson 解析 阿里巴巴 ...

  8. fastjson解析JSON数据乱序导致的问题

    本文作者:合肥工业大学 电子商务研究所 钱洋 email:1563178220@qq.com . 内容可能有不到之处,欢迎交流. 未经本人允许禁止转载. 文章目录 问题背景 问题解决 完整的案例代码 ...

  9. Android商城开发系列(六)——使用 OkHttpUtils 请求网络 + 使用 fastjson解析数据...

    OkHttp是Google推荐使用的一个开源的网络请求框架,Android开发中涉及到网络请求和接口调用现在大部分都是使用OkHttp,网上已经有不少人针对OkHttp进行了封装,这里推荐一下鸿洋大神 ...

最新文章

  1. Python 读取文本时的 read/readline/readlines
  2. html 显示消息数量,html实现消息按钮上的数量角标的实例详解
  3. 网络共享服务(一)之FTP
  4. 如何给Lombok Builder提供默认值
  5. vs的资源管理器中一次性添加整个文件夹
  6. [iOS]关于零基础学习iOS开发的学习方法总结
  7. 第二篇:Mysql---约束条件、修改表的结构、键值
  8. Linux下qt桌面程序闪退,qt无法正常使用
  9. JAVA Io 缓冲输入输出流
  10. iOS之深入解析Runloop的底层原理
  11. slqite3库查询数据处理方式_SQLite3命令操作大全
  12. 一天一点linux(15):Ubuntu14.04 如何安装字体?
  13. Intelligence System HDU - 3072(强连通分量)
  14. SQL:postgresql中查询日期date的方法
  15. 【路径规划】全局路径规划算法——动态规划算法(含python实现)
  16. 解决win7连接不了win10远程桌面
  17. 央央家政:住家育儿嫂和月嫂的工作内容明细
  18. 千村示范、万村整治 浙江
  19. python利用tcp搭建小的聊天室带文件传输
  20. tomcat7绿色版服务配置

热门文章

  1. 部署承载于 Internet 信息服务中的 WCF 服务
  2. android中TextView分段显示不同颜色,字体,时间
  3. 弱类型、强类型、动态类型、静态类型语言的区别
  4. mybatis配置文件形式
  5. 这样才能使本地Mysql服务允许被外部主机连接(两步)
  6. 代理 XP”组件已作为此服务器安全配置的一部分被关闭。系统管理员可以使用 sp_configure 来启用“代理 XP”。...
  7. git 入门教程之版本管理
  8. 自然语言处理之AI深度学习顶级实战
  9. 前端每日实战:142# 视频演示如何用 CSS 的 Grid 布局创作一枚小鸡邮票
  10. 文件共享之Samba