Alibaba FastJson

Alibaba FastJson

Json简介

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

JSON 由 键值对 构成,采用树状结构组织数据。键名必须用双引号包裹。值可以是字符串、数字、布尔值、null、数组或对象。

Json的基本数据结构如下:

类型 示例 说明
字符串 "hello" 用双引号包裹的字符序列
数字 123 整数或浮点数
布尔值 true、 false 表示真或假
null null 表示空值

JSON结构类型如下:

类型 示例 说明
对象 键值对集合,用花括号包裹
数组 [1, 2, 3] 有序的值集合,用方括号包裹

JSON 支持无限层级嵌套,形成树形结构:

{
    "name": "John",
    "age": 30,
    "isStudent": true,
    "address": {
        "street": "123 Main St",
        "city": "Anytown",
        "state": "CA"
    },
    "hobbies": ["reading", "traveling", "cooking"]
}

FastJson介绍

FastJson是阿里巴巴的开源JSON解析库;

主要功能:

  • 序列化:将JavaBean序列化为JSON字符串;
  • 反序列化:从JSON字符串反序列化到JavBean;

FastJson使用

导入依赖包

导入FastJson依赖包

<!--阿里巴巴FastJson-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>2.0.23</version>
</dependency>

String转Json

JSON字符串转为JSON对象;

//JSON字符串转为JSON对象
String jsonString = "{\"name\":\"Tom\",\"id\":10,\"false\":true}";
JSONObject jsonObject = JSON.parseObject(jsonString);
//获取Json对象值
System.out.println(jsonObject.getString("name"));
System.out.println(jsonObject.getInteger("id"));
System.out.println(jsonObject.getBoolean("false"));

JSON数组字符串转为JSON数组:

//JSON数组字符串转为JSON数组
String str = "[\"张三\",\"18\",\"宜昌\"]";
JSONArray jsonArray = JSON.parseArray(str);
//获取JSON数组对象的值(JSON数组中的类型分别为:String,Integer,String)
System.out.println(jsonArray.getString(0));
System.out.println(jsonArray.getInteger(1));
System.out.println(jsonArray.getString(2));

String转JavaBean

JSON字符串转JavaBean对象:

String jsonString = "{\"name\":\"Tom\",\"id\":10,\"config\":[{\"subKey\":\"0001\",\"devNo\":10000,\"payloads\":{\"model\":1,\"power\":true}},{\"subKey\":\"0002\",\"devNo\":20000,\"payloads\":{\"model\":1,\"power\":false}}]}";
User user = JSON.parseObject(jsonString, User.class);

Obejct(JavaBean)转String

包括JSONObject、JSONArray、JavaBean、数组、List、Set、Map都可以通过这种方式转String:

String jsonStr = JSON.toJSONString(object);

JSON注解

这是一个注解,用于配置在JavaBean,可以配置在getter/setter方法或者字段上,也可以直接配置在属性上。

注意:若属性是私有的,必须有set*方法。否则无法反序列化。

@JSONField(ordinal=1)//配置序列化的字段顺序(1.1.42版本之后才支持)

@JSONField(serialize=false) //是否参与序列化:该字段不输出  但是如果加了final,这个字段就无法被过滤

@JSONField(derialize=false) //是否参与反序列化:该字段不输出  但是如果加了final,这个字段就无法被过滤 

@JSONField(format="yyyy-MM-dd HH:mm:ss") //日期按照指定格式序列化

@JSONField(name="别名");//使用字段别名

@JSONField(serialzeFeatures={SerialzeFeatures属性});//序列化规则

@JSONField(parseFeatures={Features属性});//反序列化规则

开发使用

使用的测试类如下:

package com.tahacoo.exercise.fastjson;

import lombok.*;

import java.util.List;

@Data
@Builder
public class User {
    private String name;

    private Integer id;

    private List<Task> config;

    @Data
    public static class Task{
        //设备key值
        private String subKey;
        //设备编号
        private Integer devNo;
        //设备控制状态
        private Object payloads;
    }
}

注意:内部静态类也需要set和get方法;

练习:

获取Json对象中的config属性中的payloads,将payloads中的power字段对应的true/false值,转变为1/0值;

示例:payloads":{"model":1,"power":true},转变后:payloads":{"model":1,"power":1}

思路如下:

  1. 将json字符串转换为JavaBean对象user;
  2. 获取user中的payloads属性,将Object对象转换为JSONObject对象;
  3. 获取JSONObject对象中的值,判断后,重新赋值;

对应代码如下:

 public static void exercises(){
        ArrayList<Boolean> strings = new ArrayList<>();
        String jsonString = "{\"name\":\"Tom\",\"id\":10,\"config\":[{\"subKey\":\"0001\",\"devNo\":10000,\"payloads\":{\"model\":1,\"power\":true}},{\"subKey\":\"0002\",\"devNo\":20000,\"payloads\":{\"model\":1,\"power\":false}}]}";
        //将json字符串转化为JavaBean对象;
        User user = JSON.parseObject(jsonString, User.class);

        user.getConfig().forEach(config->{
        //将Object对象转换为JSONObject对象
        JSONObject jsonObject = (JSONObject) JSON.toJSON(config.getPayloads());
        if (jsonObject.containsKey("power")){
        //判断后,重新赋值
        jsonObject.put("power",jsonObject.getBoolean("power") ? 1 : 0);
        }
        //jsonObject.computeIfPresent("power",(key, value)->((Boolean)value ? 1: 0));
        strings.add(jsonObject.getBoolean("power"));
        });
        //将JavaBean对象转换为Json字符串
        String userJsonString = JSON.toJSONString(user);

        System.out.println(String.format("userJson: %s", userJsonString));
}

参考链接:

  1. Alibaba FastJson 常用方法使用指南
  2. https://developer.aliyun.com/article/909007
posted @ 2025-06-08 22:41  joudys  阅读(145)  评论(0)    收藏  举报