Java的FastJSON学习笔记 - 序列化JSON数据和反序列化对象数据

简介

FastJson是一个用于JSON相关操作的一个工具Jar
可以实现序列化对象为JSON数据、也可以反序列化JSON为对象数据。
使用评价非常好用

导入

话不多说,利用Maven来导入项目

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.41</version>
        </dependency>

这里我用的是1.2.41 Version

认识FastJSON类

学习FastJSON涉及到的相关类有

  1. JSONArray
  2. JSONObject
  3. JSON

以上是一般常用的FastJSON类的操作

接下来我们来看看**使用方法**

使用方法

场景一

我们现在需要将一个字符串转化为JSON数据后获取 name

//        模板JSON数据
  		String str = "{\"age\":\"24\",\"name\":\"cool_summer_moon\"}";
        //通过JSON类转换字符串为JSON数据
        JSONObject jsonData = JSON.parseObject(str);
        System.out.println("通过JSON.get方法获取name值:" + jsonData.get("name"));
        System.out.println("通过JSON.get方法获取age值:" + jsonData.get("age"));

结果

通过JSON.get方法获取name值:cool_summer_moon
通过JSON.get方法获取age值:24

场景二

我们现在需要将一个JSON数据转化为字符串

//       通过JSON类下的toJSONString 来将JSON数据转化为字符串格式
        System.out.println("JSON数据 转化为字符串 方法一:" + JSON.toJSONString(jsonData));
//       通过JSONObject下的toJSONString 来将JSON数据转化为字符串格式
        System.out.println("JSON数据 转化为字符串 方法二:" + jsonData.toJSONString());

结果

JSON数据 转化为字符串 方法一:{"name":"cool_summer_moon","age":"24"}
JSON数据 转化为字符串 方法二:{"name":"cool_summer_moon","age":"24"}

小结

现在我们已经学习了如何利用FastJSON的相关类来进行简单操作
可能大家会有想法,能不能用FastJSON来操作JSON文件呢?

当然可以,看我下面的Code示例

操作JSON文件

既然是操作JSON文件,那肯定无疑跟我们的File 的IO打交道
对于IO不了解的小伙伴可以看一下我以前的文章

定义IO工具类

IOUtils.class

	/**
     * 读取JSON文件数据返回StringBuilder以便交给FastJSON去处理
     *
     * @param file
     * @return
     */
    public static StringBuilder readerJSON(File file) {
        StringBuilder stringBuilder = new StringBuilder();
        try {
            BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
            String str = "";
            while ((str = bufferedReader.readLine()) != null) {
                stringBuilder.append(str);
            }
            bufferedReader.close();
            return stringBuilder;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

   /**
     * 定义一个写入JSON数据文件的方法
     *
     * @return
     */

    public static boolean writeObjectToJson(File file, String data) {
        try {
            BufferedWriter writer = new BufferedWriter(new FileWriter(file));
            //写入数据
            writer.write(data);
            writer.close();
            return true;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }

思路划分

单操作JSON文件(不含对象操作)

  1. 定义JSON文件的File
  2. 通过输入流和输出流进行读写操作
  3. 通过FastJSON进行操作

示例

        String str = "{\"age\":\"24\",\"name\":\"cool_summer_moon\"}";
        File file = new File("d:/db.json");
//        通过输入流写入数据
        IOUtils.writeObjectToJson(file,str);
//        通过输出流读写数据
        StringBuilder jsonString = IOUtils.readerJSON(file);
//        定义JSONObject 来进行获取操作
        JSONObject jsonObject = JSONObject.parseObject(jsonString.toString());
        System.out.println("通过IO流读写JSON数据所获得的name:" + jsonObject.get("name"));
        System.out.println("通过IO流读写JSON数据所获得的age:" + jsonObject.get("age"));

db.json

{"age":"24","name":"cool_summer_moon"}

结果

通过IO流读写JSON数据所获得的name:cool_summer_moon
通过IO流读写JSON数据所获得的age:24

单操作JSON文件(含对象操作)

  1. 定义JSON文件的File
  2. 定义实体类拥有get set方法
  3. 通过输入流和输出流进行读写操作实体类
  4. 通过FastJSON进行序列化对象

示例(用了lombok的Data注解) 不使用注解的可以定义get set方法

User.class

@Data
public class User  {
    public User()
    {

    }
    public User(String uid,String memberUid)
    {
        this.uid = uid;
        this.memberUid = memberUid;
    }
    private String uid;
    private String memberUid;

实现

//        定义File
        File file = new File("d:/db.json");
//        定义实体类数据
        User user = new User("111","222");
//        写入实体数据,并序列化为JSON格式
        IOUtils.writeObjectToJson(file,JSON.toJSONString(user));
//        读取实体数据,并为反序列化对象做准备
        StringBuilder userJson = IOUtils.readerJSON(file);

//        定义JSONObject 进行反序列化
        User userObject = JSONObject.parseObject(userJson.toString(),User.class);
//        序列化完毕后直接通过 get set方式进行获取
        System.out.println("序列化User对象后的获取操作 uidValue:" + userObject.getUid());
        System.out.println("序列化User对象后的获取操作 memberValue:" + userObject.getMemberUid());

db.json

{"memberUid":"222","uid":"111"}

结果

序列化User对象后的获取操作 uidValue:111
序列化User对象后的获取操作 memberValue:222

结束语

FastJSON特别方便对于JSON数据的操作也很简便,网络上的相关教程也层出不穷。

  1. 本人学习笔记-FastJSON分享给大家
  2. 有不足之处欢迎指出
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值