简单的使用FastJson 提高开发效率


首先引入依赖 一个是FastJson 一个是lombok 辅助用的


   <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
        </dependency>
  

1. @JSONField的使用

首先来看一个示例

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {

    @JSONField(name = "Name",ordinal = 2)
    private String name;
    @JSONField(name = "描述",ordinal = 1)
    private String desc;
    @JSONField(format = "yyyy-MM-dd")
    private Date date;
    @JSONField(serialize = false)
    private int age;
}

测试方法 测试一下这些属性对应的含义

public class Mytest {
    public static void main(String[] args) {
        Person person = new Person("baobao", "hello bb", new Date(), 18);
        // 将对象转化为json格式字符串 并打印
        System.out.println(JSON.toJSONString(person));
    }
}

输出如下

{"date":"2021-06-22","描述":"hello bb","Name":"baobao"}

对此我们可以得出一些结论:

  1. name 指定json格式的key的别名是什么
    可以看到 我们指定desc的 name = "描述" 得到的key-value为 "描述":"hello bb"
  2. serialize 指定该字段是否进行序列化 如果不序列化 则不会在结果中显示出来,如 serialize=false 而age属性我们明明设置了 但没有显示出来
  3. format 参数用于格式化 date 属性,如 format="yyyy-MM-dd" 可以看到显示的日期为"date":"2021-06-22"
  4. ordinal 指明字段显示的顺序 ⚠️注意默认值为0哦,因为我们没有设置date的值,但是它是第一个现实的

@JSONField 的作用对象:

  1. Field
  2. Setter 和 Getter 方法

⚠️注意:
1.FastJson 在进行操作时,是根据 getter 和 setter 的方法进行的,并不是依据 Field 进行。
2.若属性是私有的,必须有 set 方法。否则无法反序列化,如果Field与Getter同时设置,则以Getter为准,因为我们取属性的值都是由Getter方法来取的,这点需要注意。

2. 创建JSON对象

public class JsonDemo {
    public static void main(String[] args) {
        JSONArray jsonArray = new JSONArray();
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", "bb");
        jsonObject.put("age", "18");
        System.out.println(jsonObject.toJSONString());
        JSONObject jsonObject2 = new JSONObject();
        jsonObject2.put("name", "cc");
        jsonObject2.put("age", "20");
        System.out.println(jsonObject2.toJSONString());
        // 创建json对象 要放入JsonArray中
        jsonArray.add(jsonObject);
        jsonArray.add(jsonObject2);
        String jsonString = jsonArray.toJSONString();
        System.out.println(jsonString);
    }
}

结果输出

{"name":"bb","age":"18"}
{"name":"cc","age":"20"}
[{"name":"bb","age":"18"},{"name":"cc","age":"20"}]

说白了 单个JSON对象 直接使用JSONObject而如果JSON格式中包含多个属性 则需要使用JSONArray

3. JSON 字符串转换为 Java 对象

示例如下

public class JsonDemo {
    public static void main(String[] args) {
        String json = "{\"name\":\"cc\",\"age\":\"20\"}";
        User user = JSON.parseObject(json, User.class);
        System.out.println(user);
    }
}

@Data
@AllArgsConstructor
@NoArgsConstructor
class User {
    private String name;
    private int age;
}

结果输出:

User(name=cc, age=20)

⚠️注意:

反序列化为对象时 必须要有无参构造!!!!!!!!!
反序列化为对象时 必须要有无参构造!!!!!!!!!
反序列化为对象时 必须要有无参构造!!!!!!!!!

最后再说一点 JsonField对于时间格式化效果不是那么的好 推荐使用@JsonFormat

可以将实体类的时间格式转化成如下格式 且可以设置时区 一般都要设置 否则时间会出现错误

@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值