记谷歌的GSON和阿里巴巴的Fastjson使用

gson和fastjon顾名思义两者都是对json数据的转换,序列化和反序列化

Gson

Gson提供了fromJson()toJson() 
其中tojson是对数据的序列化,参数可以为Objdect类型、实体类型等
而fromjson()是对数据反序列化,里面参数一般为(String类型,实体类)等

在有一次项目中,我使用gson来将json数据放入一个实体类型当中,发现怎么都放不进去,于是我就开始了漫漫的寻bug之路。
发现我的JSON数据的首字母是大写,而实体类里面的字段的首字母是手写的,所以会对应不上去,从而封装不进对象里面去

json数据:{"A":"A"}
实体类字段名称:private String a; //字段名称不一致,所以封装不进
而解决的办法就是 在字段上面增加注解@SerializedName(name ="A")
其注解的作用就是告诉gson A对应的即是字段名称a
另外该注解还有一个属性alternate,该属性接收的是一个String数组
alternate="b,c,d"意思三个属性出现任意一个都可以对应得上,以最后一个为准

另外gson直接转为list、list<实体类>等是不行的

需要指定一个Type类型
Type typeToken = new TypeToken<List<Map<String, Object>>>() {}.getType();
//TypeToken的构造方法是protected修饰的,所以上面才会写成new TypeToken<List<<Map<String, Object>>>() {}.getType() 而不是 new TypeToken<List<<Map<String, Object>>>().getType()

//然后才可以使用fromjson对数据进行反序列化
List<Map<String, Object>> nameList = gson.fromJson(json数据, typeToken);

fastjon方法

JSONObject类使用
JSONObject.toJSONString() 数据序列化   参数类型可以是Object、实体类等
JSONObject.parseObject()  数据的反序列化  参数一般是(json数据,实体类)等
另外alibaba的fastjson中的JSONObject.parseObject()方法是忽略大小写的,意思就是json数据如果是{"A":"A","a":"a"}
字段名称是 String A   String a  这个小a是封装不进的(如果是这种命名规则建议使用gson)
不过我们一般的命名规则都是首字母小写,使用fastjson也是相当的方便的

如果封装的类型跟JSON数据的类型是一样(key是大写的,传过来接收的也是大写的)
可以在字段名称上面加上注解@JSONField(name=“A”),也可以在get方法上面添加

JSONArray
List<person> person=new ArrayList<person>();
JSONArray jsonArray=new JSONArray();//1、创建JSONArray
jsonArray.addAll(person);//把JSONArray添加List,List<person>转JSONArray,同时也可以是Map,Set等集合

jsonArray.toJSONString();//JSONArray转化json字符串

users=JSON.parseArray(jsonStr, Person.class);//json字符串转List<Person>

本文只作为自己一个记录日常所在,欢迎各界大佬指点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值