一、JSON类介绍
a、JSON主要实现JSONObject对象,JSONArray对象数组,javabean对象,json字符串之间的相互转化。
b、其中,有关键字transient修饰的toJSONString()用于json对象序列化过程中,希望某个"键:值"出现在json字符串中。
使用:
1、JSON类之toJSONString()方法,实现json对象转化为json字符串和javabean对象转化为json 字符串。
2、JSON类之parseObject()方法,实现json字符串转换为json对象或javabean对象
JSONObject jsonObject = JSON.parseObject(s); ===>{"name":"北京","id":1}
Address address = JSON.parseObject(s, Address.class); ===> Address(name=北京, id=1)
3、JSON类之JSONArray()方法,实现json字符串转化为json对象数组或List<T>
JSONArray objects = JSON.parseArray(s1); ===> [{"name":"北京","id":1},{"name":"天津","id":2}]
List<Address> list1 = JSON.parseArray(s1, Address.class); ===>[Address(name=北京, id=1), Address(name=天津, id=2)]
4、JSON类之toJSON()方法,实现javabean对象转化为json对象
Object o = JSON.toJSON(address); ===>{"name":"北京","id":1}
5、JSON类之toJavaObject()方法,实现json对象转化为javabean对象
Address address1 = JSON.toJavaObject((JSON) o, Address.class); ===>Address(name=北京, id=1)
二、Fastjson 定制序列化
1、@JSONField
可以把@JSONField配置在字段或者getter/setter方法上===>只表现在json字符串,也就是只对toJSONString()方法生成的字符串有效
2、@JSONType
JSONField类似,但JSONType配置在类上,而不是field或者getter/setter方法上。
3、SerializeFilter
PropertyFilter filter = new PropertyFilter() {
public boolean apply(Object source, String name, Object value) {
if ("id".equals(name)) {
int id = ((Integer) value).intValue();
return id >= 100;
}
return false;
}
};
JSON.toJSONString(obj, filter);
4、ParseProcess定制反序列化
//注:使用ExtraProcessor 处理多余字段
ExtraProcessor processor = new ExtraProcessor() {
public void processExtra(Object object, String key, Object value) {
VO vo = (VO) object;
vo.getAttributes().put(key, value);
}
};
VO vo = JSON.parseObject("{\"id\":123,\"name\":\"abc\"}", VO.class, processor);
三、springMVC集成fastJson
1、springmvc
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="fastJsonConfig" ref="fastJsonConfig"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<bean id="fastJsonConfig" class="com.alibaba.fastjson.support.config.FastJsonConfig">
<!-- 自定义配置... -->
</bean>
2、springBoot
@Configuration
public class WebMvcConfigurer extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
//自定义配置...
//FastJsonConfig config = new FastJsonConfig();
//config.set ...
//converter.setFastJsonConfig(config);
converters.add(0, converter);
}
}
四、fastJson解决泛型转换
Result<User> obj = (Result<User>) JSON.parseObject(js, new TypeReference<Result<User>>(){});