fastjson

本文介绍了阿里巴巴开源JSON解析库fastjson,它能解析JSON格式字符串,支持Java Bean与JSON字符串的序列化和反序列化,其API十分简洁,还给出了官网地址https://github.com/alibaba/fastjson/wiki/Quick-Start-CN 。

官网地址
https://github.com/alibaba/fastjson/wiki/Quick-Start-CN
在这里插入图片描述

  1. 什么是fastjson?

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

fastjson的API十分简洁。

json 基本值类型 true ,false, number,string, object,array, null

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


import com.alibaba.fastjson.JSON;

  Model model = new Model();
        model.id = 1001;
        model.name = "gaotie";

        Model model2 = new Model();
        model2.id = 1002;
        model2.name = "gaotie2";

        Vector<Model> modelVec=new Vector<>();
        modelVec.add(model);
        modelVec.add(model2);

        ModelBig modelBig=new ModelBig();
        modelBig.id= 2001;
        modelBig.name="bigname1";
        modelBig.modelVec=modelVec;


        // class 转 string 
        String jsonString1 = JSON.toJSONString(modelBig);
        System.out.println(" Java对象 转换为 string ,打印String对象 为:  " + jsonString1);
       //Java对象 转换为 string ,打印String对象 为:  {"id":2001,"modelVec":[{"id":1001,"name":"gaotie"},{"id":1002,"name":"gaotie2"}],"name":"bigname1"}

com.alibaba.fastjson.JSONObject jsonObject2 = (com.alibaba.fastjson.JSONObject) com.alibaba.fastjson.JSONObject.toJSON(modelBig);
        System.out.println("Java对象转化为  object对象  强转为 JSONObject ,打印JSONObject  为:   \n" + jsonObject2);//
        //Java对象转化为  object对象  强转为 JSONObject ,打印JSONObject  为:   
       //{"id":2001,"name":"bigname1","modelVec":[{"id":1001,"name":"gaotie"},{"id":1002,"name":"gaotie2"}]}


//  Demo
//  parse Tree

import com.alibaba.fastjson.*;

JSONObject jsonObj = JSON.parseObject(jsonStr);

//  parse POJO

import com.alibaba.fastjson.JSON;

Model model = JSON.parseObject(jsonStr, Model.class);

//  parse POJO Generic

import com.alibaba.fastjson.JSON;

Type type = new TypeReference<List<Model>>() {}.getType(); 
List<Model> list = JSON.parseObject(jsonStr, type);

//  convert POJO to json string

import com.alibaba.fastjson.JSON;

Model model = ...; 
String jsonStr = JSON.toJSONString(model);

//  convert POJO to json bytes

import com.alibaba.fastjson.JSON;

Model model = ...; 
byte[] jsonBytes = JSON.toJSONBytes(model);

//  write POJO as json string to OutputStream

import com.alibaba.fastjson.JSON;

Model model = ...; 
OutputStream os;
JSON.writeJSONString(os, model);

//  write POJO as json string to Writer

import com.alibaba.fastjson.JSON;

Model model = ...; 
Writer writer = ...;
JSON.writeJSONString(writer, model);

 

3.2 Java类库

Fastjson
Jackson
Gson
Xstream
### 使用方法 在FastJson中,对象与JSON的相互转换是基础操作。将对象转换为JSON可使用`JSON.toJSONString(obj)`方法,而将JSON转换为对象则使用`JSON.parseObject(jsonString, User.class)`方法。当JSON中包含Java对象没有的属性时,可通过创建反序列化特性`Feature[] features = {Feature.IgnoreNotMatch}`,并使用`JSON.parseObject(jsonString, User.class, features)`来进行反序列化操作 [^1][^3]。 ### 特性 FastJson具有一些显著特性。在性能方面,相较于Jackson和Gson,FastJson通常性能更高。其API更简单,使用起来较为便捷,并且功能丰富。不过,它也存在一些不足,例如缺乏像Jackson那样丰富的生态系统,设计的优雅程度和稳定性也不如Gson [^1]。 ### 常见问题解决方案 当JSON中包含Java对象没有的属性时,可通过创建反序列化特性并使用相应方法进行反序列化,避免出现异常。如创建`Feature[] features = {Feature.IgnoreNotMatch}`,再使用`JSON.parseObject(jsonString, User.class, features)`进行反序列化 [^1]。 ### 代码示例 ```java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.parser.Feature; class User { private String name; private int age; // Getters and Setters public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } public class FastJsonExample { public static void main(String[] args) { // 创建对象 User user = new User(); user.setName("John"); user.setAge(30); // 对象转JSON String jsonString = JSON.toJSONString(user); System.out.println("Object to JSON: " + jsonString); // JSON转对象 User parsedUser = JSON.parseObject(jsonString, User.class); System.out.println("JSON to Object - Name: " + parsedUser.getName() + ", Age: " + parsedUser.getAge()); // 处理JSON中包含Java对象没有的属性的情况 String jsonWithExtraAttr = "{\"name\":\"John\",\"age\":30,\"extra\":\"value\"}"; Feature[] features = {Feature.IgnoreNotMatch}; User userWithExtra = JSON.parseObject(jsonWithExtraAttr, User.class, features); System.out.println("JSON with extra attr to Object - Name: " + userWithExtra.getName() + ", Age: " + userWithExtra.getAge()); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值