FastJSON入门到熟悉

在这里插入图片描述

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作用一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值