以下介绍阿里的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; }