FastJson的简单使用

阿里巴巴提供的JSON框架。实现Java对象与JSON格式字符串的相互转换,十分方便。

序列化:Java Bean转为JSON 字符串。

String jsonString = JSON.toJSONString(obj);

反序列化:JSON 字符串转为Java Bean。

User user = JSON.parseObject("...", User.class);

pom.xml文件中添加依赖:

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

 一、类层次结构

查看包结构,用的比较多的主要是:JSON、JSONArray、JSONObject 这三个类。

(JSONObject 里面还有内部类,所有类前有个 > 符号)

 JSON类是抽象类,实现了JSONStreamAware, JSONAware 两个接口。

JSONStreamAware接口仅有一个方法,唯一的实现类即是JSON(JSONArray、JSONObject都继承了JSON

 JSONAware接口也仅有一个方法,有两个实现类:JSON、JSONPath。

 JSON类中,ctrl+O,搜索toJSONString方法,可以看到有很多的重载方法。

一般用Object参数的即可。(m表示方法,圆圈的左下角有个菱形,表示是类的静态方法)

 

 二、JSON

1、JSON.parse()  返回的是Object对象。

2、JSON.parseArray()  返回的是:JSONArray 或 List<T>、或 List<Object> 。

3、JSON.parseObject()  返回的是:JSONObject 或 <T> T 。

4、JSON.toJSONString()  返回的是:String 。

5、JSON.toJSONBytes()  返回的是:byte[] 。

JSONArray、JSONObject都继承了JSON,并各自实现了一些接口,它们都没有静态方法。通用的静态方法均通过 JSON 类直接调用。

Map中的每个键值对,对应JavaBean中的一个属性。键为属性名,值为属性值。Java中,一个Map<String, Object>对象可以等价描述为一个JavaBean。JSONObject即是这样场景下的Map。

(1)toJSONString(Object object)  转为字符串

private static final Logger logger = LoggerFactory.getLogger(Test.class);
public static void main(String[] args) {
        Student student = new Student("张三",18,"001","深圳");
        Map map = new HashMap();
        map.put("name","zs");
        map.put("age",20);
        logger.info("输出信息:{}",JSON.toJSONString(student));
        logger.info("map信息:{}",JSON.toJSONString(map));
    }

//输出
16:09:08.475 [main] INFO com.xiexie.demo.Test - 输出信息:{"address":"深圳","age":18,"name":"张三","stuNum":"001"}
16:09:08.491 [main] INFO com.xiexie.demo.Test - map信息:{"name":"zs","age":20}

 (2)parseObject(String text, Class<T> clazz)  转为Java 对象

String jsonStr = "{name:'李四',age:'12',stuNum:'002',address:'广州'}";
Student parse = JSON.parseObject(jsonStr,Student.class);
System.out.println("parse = " + parse);
String sss = JSON.toJSONString(parse);
System.out.println(sss);

//输出
parse = Student(name=李四, age=12, stuNum=002, address=广州)
{"address":"广州","age":12,"name":"李四","stuNum":"002"}

 (3)parseObject(String text)  转为JSONObject 对象(本质是一个map)

对于不同类型的各种属性,JSONObject 提供了对应类型的getXXX() 方法。

JSONObject jsonObject = JSON.parseObject(str);
//获取返回值为String类型的值;get返回object类型值
String name = jsonObject.getString("name");
Integer age = jsonObject.getInteger("age");

(4)parseArray(String text, Class<T> clazz)  转为list集合

List<Student> students = JSON.parseArray(str, Student.class);

三、@JSONField 注解

(1)name属性

 一般,JSON字段中的名字和类的属性是一致的。有时需要指定/修改JSON中的字段名时,可以使用@JSONField 注解+name 。

Student student = new Student("张三",18,"001","深圳");
String str = JSON.toJSONString(student);
System.out.println(str);

Student student1 = JSON.parseObject(str, Student.class);
System.out.println("student1 = " + student1);

//输出
str = {"add":"深圳","age":18,"name666":"张三","stuNum":"001"}
student1 = Student(name=张三, age=18, stuNum=001, address=深圳)

(2)serialzeFeatures 属性

将对象转为JSON 格式字符串时,fastJson 会自动忽略值为 null 的属性。需要以完整形式展示对象的所有属性时,需要设置 @JSONField 注解的 serialzeFeatures 属性值。

@JSONField(name = "name666",serialzeFeatures = {SerializerFeature.WriteMapNullValue})
private String name;

Student student = new Student(null,18,"001","深圳");
String str = JSON.toJSONString(student);
System.out.println("str = " + str);

//输出
str = {"add":"深圳","age":18,"name666":null,"stuNum":"001"}

(3)format 属性

属性有 Date 类型时,涉及到 Date 类型的字符串格式转化问题,可以使用format 属性自定义字符串格式。

@JSONField(format="yyyy-MM-dd HH:mm:ss")
private Date birthDate;

(4)serialize 属性(默认是true)

属性上标注了 @JSONField(serialize=false) 的属性,在序列化为JSON格式字符串的过程中,会被 fastJSON 忽略,不管是否有值,均不序列化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Fastjson是一个Java语言编写的高性能JSON处理库,可以实现JSON字符串与Java对象之间的相互转换。下面是一个简单的示例,演示了如何使用Fastjson进行JSON的序列化和反序列化: 1. 导入Fastjson的依赖包到你的项目中。你可以在Maven或Gradle配置文件中添加以下依赖: ```xml <!-- Maven --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.78</version> </dependency> // Gradle implementation 'com.alibaba:fastjson:1.2.78' ``` 2. 创建一个Java对象,例如: ```java public class Person { private String name; private int age; // getters and setters } ``` 3. 将Java对象转换为JSON字符串: ```java import com.alibaba.fastjson.JSON; Person person = new Person(); person.setName("John"); person.setAge(25); String jsonString = JSON.toJSONString(person); System.out.println(jsonString); ``` 这将输出以下JSON字符串: ```json {"age":25,"name":"John"} ``` 4. 将JSON字符串转换为Java对象: ```java String jsonString = "{\"name\":\"John\",\"age\":25}"; Person person = JSON.parseObject(jsonString, Person.class); System.out.println(person.getName()); System.out.println(person.getAge()); ``` 这将输出: ``` John 25 ``` 这只是Fastjson的基本用法示例,你还可以使用Fastjson进行更复杂的JSON处理操作,例如处理嵌套对象、数组等。你可以参考Fastjson的官方文档(https://github.com/alibaba/fastjson/wiki/Quick-Start)了解更多用法和功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值