阿里的fastjson使用总结

xiaoxiao2021-02-28  113

//查询的datetime日期格式数据, 需要使用阿里的fastjson注解,转为字符串展示 @JSONField(format = "yyyy-MM-dd HH:mm:ss") // FastJson包使用注解 private Date createtime; 微服务中(消费方调用rpc接口提供方) JSON数据的流转: 一般在serviceImpl业务层调用rpc的restful接口,返回对象,来做自己的业务.  最后在自己的controller返回数据既可. {        "student.id": "1",        "user": {               "name": "张三"        } } 1.jackson是spring mvc内置的json转换工具, 2.谷歌的Gson(idea安装的GsonFormat插件就是goole的,alt+s(可以格式化json,亦可将json生成实体类)) , 3.阿里的FastJSON(号称是最快的JSON转换) 1.关于转为json字符串 出现的 / 转义字符 如何解决?  在@ResponseBody转为json, 多出 // 转义字符, 需要先parse() 再@ResponseBody转为json字符串 Msg.success().add(JSON.parse(JSON.toJSONString(resp)));

以下介绍阿里的fastjson的常用API:

1.对象  JSON.toJSONString(user/list/map)最为常用,可以将vo,map,list转为json格式的字符串

3.反序列化:   VO vo = JSON.parseObject("jsonString", VO.class);//反序列化前需要判断jsonString,为不为"[]",即一条记录没有,没有的话,就不要反序列化了,否则fastjson会因为没有记录反序列化失败而报错.

  HashMap<String,Object>  hashMap = JSON.parseObject(jsonString, HashMap.class);   List<Person> list = JSON.parseArray(jsonString, Person.class);

JSON.parseArray的理解:

String jsonString = [{"name":"张三","age":"1"},{"name":"李四","age":"4"}], 通过JSON.parseArray(jsonString, Person.class);就可以将jsonString反序列化为包含多个person对象的list集合

 

4.fastjson过滤不要要序列化的变量,在不需要序列化的成员变量的get方法上加如下注解

@JSONField(serialize = false)

 

5.SpringMVC的@Responsebody注解将对象转为json,这里在成员变量的get方法加如下注解,可以改变转为json的名称

@JSONField(name = "SiteKey")   //原本返回的是小写s的siteKey,加此注解后,返回的就是大写S的SiteKey

private String getSiteKey() {

return siteKey;

}

 

6.成员变量的set方法上的@JSONField(name = "SiteKey")注解怎么理解:

Json.parseObject(jsonString)反序列化的过程是先看成员变量的set方法有没有@JsonField(name = "")的注解,没有的话,直接找成员变量(忽略首字母大小写,即首字母是大写,也可以匹配到小写的成员变量,序列化成功)如果有该注解,则按该注解的name(不区分单次大小写,你全大写全小写都可以反序列化成功(前提是你成员变量有这个单词))在成员变量里匹配,没匹配上的属性,就不会反序列化到实体类里

 

我们来看下实现类:用以借鉴,以后你调用别人的接口, 拿到的json字符串,可以用Json.parseObject转为map选择性使用json;也可以建造一个实体类 @JSONField(name="Site")//在成员变量的set方法加这个注解,解决调用别人的接口,返回的json字段名称和我的实体类定义的成员变量不一致的问题, rpc接口返回的json转为实体类(JSON.parseArray())时,先在rpc返回值得json中找Site/或者我定义的成员变量有site字段, 有的话就将json中的Site信息就封装到成员变量sitekey里了 @JSONField(name="Site")     public void setSitekey(String sitekey) {         this.sitekey = sitekey;     }

 

 

 

 

转载请注明原文地址: https://www.6miu.com/read-53920.html

最新回复(0)