fastJSON

一、fastjson介绍
​在前后端数据传输交互中,经常会遇到字符串(String)与json,XML等格式相互转换与解析,其中json以跨语言,跨前后端的优点在开发中被频繁使用,基本上可以说是标准的数据交换格式。fastjson 是一个java语言编写的高性能且功能完善的JSON库,它采用一种“假定有序快速匹配”的算法,把JSON Parse 的性能提升到了极致。它的接口简单易用,已经被广泛使用在缓存序列化,协议交互,Web输出等各种应用场景中。

FastJson是啊里巴巴的的开源库,用于对JSON格式的数据进行解析和打包。

特点如下:

能够支持将java bean序列化成JSON字符串,也能够将JSON字符串反序列化成Java bean。
顾名思义,fastjson操作 JSON的速度是非常快的。
无其他包的依赖。
使用比较方便。
二、fastjson使用
maven依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <!--(起码1.2.48以上)因为这个版本一下存在漏洞-->
    <version>版本根据自己需要</version>
</dependency>
什么是JSON
JSON是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

1. 什么是fastjson?
fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

2.fastjson的优点
2.1 速度快
fastjson相对其他JSON库的特点是快,从2011年fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越。

2.2 使用广泛
fastjson在阿里巴巴大规模使用,在数万台服务器上部署,fastjson在业界被广泛接受。在2012年被开源中国评选为最受欢迎的国产开源软件之一。

2.3 测试完备
fastjson有非常多的testcase,在1.2.11版本中,testcase超过3321个。每次发布都会进行回归测试,保证质量稳定。

2.4 使用简单
fastjson的API十分简洁。

String text = JSON.toJSONString(obj); //序列化
VO vo = JSON.parseObject("{...}", VO.class); //反序列化

2.5 功能完备
支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展。

(以上粘自fastjson的wiki)

3.使用FastJson
如同上面的介绍,fastjson的api十分简单,对象转换成json串或从json串转换为对象每个操作都只要一行就能完成,下面就对fastjson的部分功能进行测试。

引入依赖
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <!-- 建议使用1.2.83,以下会出现反序列化漏洞 -->
    <version>版本根据自己需要</version>
</dependency>
常用API
public static final Object parse(String text); 

public static final JSONObject parseObject(String text);
    
public static final <T> T parseObject(String text, Class<T> clazz);

public static final JSONArray parseArray(String text); 

public static final <T> List<T> parseArray(String text, Class<T> clazz); 

public static final String toJSONString(Object object); 

public static final String toJSONString(Object object, boolean prettyFormat); 

public static final Object toJSON(Object javaObject); 


使用
a. Json转换对象
public class Result implements Serializable {

    private static final long serialVersionUID = -7058259606180978358L;

    @SerializedName("code")
    private Integer code;

    @SerializedName("data")
    private Data data;

    @SerializedName("message")
    private List<Data> message;

    // 可以使用SerializedName重命名
    @SerializedName("a")
    private String content;

    @SerializedName("type")
    private boolean type;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public Data getData() {
        return data;
    }

    public void setData(Data data) {
        this.data = data;
    }

    public List<Data> getMessage() {
        return message;
    }

    public void setMessage(List<Data> message) {
        this.message = message;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
    
    public boolean isType() {
        return type;
    }

    public void setType(boolean type) {
        this.type = type;
    }
    
    @Override
    public String toString() {
        return "Result{" +
                "code='" + code + '\'' +
                ", data=" + data +
                ", message=" + message +
                ", content='" + content + '\'' +
                ", type=" + type +
                '}';
    }
}

public class Data {

    @SerializedName("username")
    private String username;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}
例:
{
  "code": 200,
  "message": [{
          "username":"小明"
    },
    {
        "username":"小白"
    }
  ],
  "data":{
      "username":"张三"
  },
  "a":"1",
  "type":true
}

使用JSONObject.parseObject():
JSONObject jsonObject = JSONObject.parseObject(str);
String code = jsonObject.get("code") + "";

Json转换为实体类:
Result result = JSONObject.parseObject(str, Result.class);

[
    {
      "code": 200,
      "message": [{
              "username":"小明"
        },
        {
            "username":"小白"
        }
      ],
      "data":{
          "username":"张三"
      },
      "a":"1",
      "type":true
    }
]

List<Result> results = JSONObject.parseArray(str, Result.class);

b. 对象转换为Json

ArrayList<Data> datas = new ArrayList<>();
Data data2 = new Data();
data2.setUsername("小白");
datas.add(data2);

Data data = new Data();
data.setUsername("小明");

Result result = new Result();
result.setCode(200);
result.setContent("1");
result.setData(data);
result.setMessage(datas);
result.setType(true);

String s = JSON.toJSONString(result);

结果:
{
    "code":200,
    "content":"1",
    "data":{
        "username":"小明"
    },
    "message":[
        {
            "username":"小白"
        }
    ],
    "type":true
}
 

FastjsonFastjson2都是JSON库,用于处理JSON格式的数据。 Fastjson2是Fastjson项目的重要升级,旨在为未来十年提供高性能的JSON库。相比于原来的FastjsonFastjson2在性能上有了很大的提升,并且更加安全。它完全删除了autoType白名单,提升了安全性。 在使用上,导入Fastjson2的依赖后,与原来的Fastjson在代码上基本相同。唯一的区别是在Fastjson2中,将`jsonArray.toJavaList`方法转变为`jsonArray.toList`。 总结来说,FastjsonFastjson2都是用于处理JSON数据的库,但Fastjson2是Fastjson的升级版本,提供了更高的性能和更好的安全性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [fastjson2 介绍及使用](https://blog.csdn.net/qq_33697094/article/details/128114939)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Fastjson2你开始使用了吗?来看看源码解析](https://blog.csdn.net/chenxuyuana/article/details/125581066)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值