Json&Gson高级进阶系列1

一.JSON概念部分

1.json概念

定义:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。可用于数据标记,存储,传输

2.json解析示意图

json的解析一般有三种方式,即Gson,Jackson,Fastjson
在这里插入图片描述

3.json语法格式

总体来说就是键值对

对象

在这里插入图片描述
举例:

{
   
	"name":"ljh",
	"age":21
}
如果是数组,就加个中括号[]

在这里插入图片描述
举例:array数组里面是两个对象

"array":[
	{
   
		"name":"ljh",
		"age":21
	},
	{
   
		"name":"ljh1",
		"age":22
	}
]

如果符合这些格式,就说明是格式良好的json,方便使用gson等来解析。

二.Gson

1.Gson相关的注解

@SerializedName:里面的参数作为json的key
class MyClass {
   
    @SerializedName("name") //a => name
    String a;
    @SerializedName(value = "name1", alternate = {
   "name2", "name3"})
    String b;

    String c;

    public MyClass(String a, String b, String c) {
   
        this.a = a;
        this.b = b;
        this.c = c;
    }

    public static void test(){
   
        MyClass target = new MyClass("v1", "v2", "v3");
        Gson gson = new Gson();
        String json = gson.toJson(target);
        System.out.println(json);
        /**
         * {"name":"v1","name1":"v2","c":"v3"}
         */
    }
}
@Expose:过滤掉是否需要序列化/反序列化的属性
class User0 {
   
    @Expose
    private String firstName;//默认参与序列化,也参与反序列化

    @Expose(serialize = false)
    private String lastName;//不参与序列化,但参与反序列化

    @Expose(serialize = false, deserialize = true)
    private String emailAddress; //不参与序列化,但参与反序列化(默认)

    @Expose(serialize = true,deserialize = false)
    private String password;//参与序列化,但不参与反序列化

    public User0(String firstName, String lastName, String emailAddress, String password) {
   
        this.firstName = firstName;
        this.lastName = lastName;
        this.emailAddress = emailAddress;
        this.password = password;
    }

    @Override
    public String toString() {
   
        return "User0{" +
                "firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                ", emailAddress='" + emailAddress + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public static void test(){
   
        /**
         * 如果要让expose注解发挥作用,必须
         * new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
         * 这样来构建Gson对象
         */
        Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
        String json = gson.toJson(new User0("jinhao","liu","email","111"));
        System.out.println(json);
        /**
         * {"firstName":"jinhao","password":"111"}
         */

        User0 user0 = gson.fromJson(json,User0.class);
        System.out.println(user0);
        /**
         * User0{firstName='jinhao', lastName='null', emailAddress='null', password='null'}
         * 需要注意的是password参与序列化,所以json中可以打印password的值。但是他不参与
         * 反序列化,所以解析的时候password赋默认值null
         */
    }
}

可以看下@Expose的源码。
在这里插入图片描述
可以发现他赋的默认值都为true

@since@until

版本控制。当使用since注解的时候,意为当版本大于等于since注解的参数的时候,被since注解修饰的属性才会参与序列化/反序列化,否则忽略

class User1 {
   
    private String firstName;
    private String lastName;
    @Since
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值