Fastjson 简介
Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。
Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象。
Fastjson 源码地址:https://github.com/alibaba/fastjson
Fastjson 中文 Wiki:https://github.com/alibaba/fastjson/wiki/Quick-Start-CN
https://repo1.maven.org/maven2/com/alibaba/fastjson/
json
轻量级的数据交换格式,完全独立于编程语言的文本格式来存储和表示数据,简洁,清晰,容易解析,提高网络传输效率
java bean序列化为json字符串,json字符串反序列化为java bean
优点:
- 速度快
- 使用简单
- 功能完备
支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.75version>
dependency>
springboot中的配置
@Bean
public HttpMessageConverter configureMessageConverters() {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
config.setSerializerFeatures(
SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullStringAsEmpty,
SerializerFeature.WriteNullNumberAsZero,
SerializerFeature.WriteNullListAsEmpty,
SerializerFeature.WriteNullBooleanAsFalse,
SerializerFeature.DisableCircularReferenceDetect);
converter.setFastJsonConfig(config);
converter.setDefaultCharset(Charset.forName("UTF-8"));
List<MediaType> mediaTypeList = new ArrayList<>();
mediaTypeList.add(MediaType.APPLICATION_JSON);
converter.setSupportedMediaTypes(mediaTypeList);
return converter;
}
User user1 = new User(11, "lisi");
User user2 = new User(12, "zhangsan");
String s = JSON.toJSONString(user1);
System.out.println("对象变为json字符串" + s);
User user = JSON.parseObject(s, User.class);
System.out.println("json字符串变为对象" + user);
JSONObject jsonObject = (JSONObject)JSON.toJSON(user1);
System.out.println("java对象变为json对象" + jsonObject);
User user3 = JSON.toJavaObject(jsonObject, User.class);
System.out.println("json对象变为java对象" + user3);
List list = new ArrayList();
list.add(user1);
list.add(user2);
String s1 = JSON.toJSONString(list);
System.out.println("list变为json字符串" + s1);
List<User> users = JSON.parseArray(s1, User.class);
System.out.println("json字符串变为list" + users);
Map map = new HashMap();
map.put("user1", user1);
map.put("user2", user2);
String smap = JSON.toJSONString(map);
System.out.println("map变为json字符串" + smap);
Map<String, Student> map = JSON.parseObject(smp, new TypeReference<Map<String, User>>());
System.out.println("json字符串变为map" + users);
JSONObject jsonObject = new JSONObject();
jsonObject.put("userName", "中文");
jsonObject.put("password", "1 + 1");
jsonObject.toJSONString();
Map<String,String> = jsonObject.parseObject(jsonObject.toJSONString(), new TypeReference<Map<String,String>>);
枚举常量,做序列化的个性需求
public class UserRequest {
private Long id;
private String userName;
private String password;
}
public class FastjsonTest {
public static void main(String[] args) {
UserRequest u1 = new UserRequest();
u1.setId(1L);
u1.setPassword("u1");
String s = JSON.toJSONString(u1);
System.out.println(s);
}
}
String s = JSON.toJSONString(u1, SerializerFeature.WriteMapNullValue);
String s = JSON.toJSONString(u1, SerializerFeature.WriteNullStringAsEmpty);
public static void main(String[] args) {
UserRequest u1 = new UserRequest();
u1.setPassword("u1");
String s = JSON.toJSONString(u1, SerializerFeature.WriteNullNumberAsZero);
System.out.println(s);
}
WriteNullBooleanAsFalse
WriteDateUseDateFormat
public static void main(String[] args) {
UserRequest u1 = new UserRequest();
u1.setPassword("u1");
String s = JSON.toJSONString(u1, SerializerFeature.WriteNullNumberAsZero, SerializerFeature.PrettyFormat);
System.out.println(s);
}
@JSONField(name = "userName", ordinal = 1)
private String name;
name:序列化之后名字变为userName 和jason-databind的 @JsonProperty作用一样
ordinal:序列化的顺序,小的在前面
format = "YYYY-MM-dd :格式化
@JSONField(format = "YYYY-MM-dd")
private Date brithday;
serialize = false 不会序列化该属性
@JSONField(serialize = false)
private String email;
unwrapped:压扁对象,和jackson-databind的@JsonUnWrapped作用一样