fastjson简易教程

简介

java的JSON序列化库。提供服务器和安卓端两种解析工具,表现性能较Gson和Jackson更好。

  1. toJSONString(object)将对象转换为JSON字符串
  2. parseobject(JSON)负责将JSON字符串转换为对象。
  3. 允许转换预先存在的无法修改的对象
  4. 支持反序列化
  5. 允许对象的自定义表示,允许自定义序列化类
  6. 支持任意复杂对象

配置和使用

安装和配置

MAVEN坐标:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>${project.version}</version>
</dependency>

使用

快速开始

class test {
	private List<Person> people = new LinkedList<Person>();
	
	public void parseToJSON(){
		people.add(new Person(15, "yichen", new Date());
		people.add(new Person(20, "leitong", new Date());
		String json = JSON.toJSONString(people);
		System.out.print(json);
	}
}

执行结果:

[  
    {  
        "AGE":15,
        "DATE OF BIRTH":1468962431394,
        "FULL NAME":"yichen"
    },
    {  
        "AGE":20,
        "DATE OF BIRTH":1468962431394,
        "FULL NAME":"leitong"
    }
]

@JSONField 注解以及所有配置参数

可以作用于:

  1. Field
  2. Setter getter

本注解可以使用的配置参数:

package com.alibaba.fastjson.annotation;

public @interface JSONField {
    // 配置序列化和反序列化的顺序,1.1.42版本之后才支持
    int ordinal() default 0;

     // 指定字段的名称
    String name() default "";

    // 指定字段的格式,对日期格式有用, 通常以这种格式:"ddMMyyyy" 来表示日、月、年,顺序可替换。
    String format() default "";

    // 是否序列化
    boolean serialize() default true;

    // 是否反序列化
    boolean deserialize() default true;
}

BeanToArray()

fastjson还支持BeanToArray序列化功能:

String jsonOutput= JSON.toJSONString(people, SerializerFeature.BeanToArray);
System.out.print(jsonOutput);

执行结果为:

[
    [
        15,
        1469003271063,
        "yichen"
    ],
    [
        20,
        1469003271063,
        "leitong"
    ]
]

创建JSON对象

fastjson内置了两种JSON对象:

  1. JSONObject
  2. JSONArray

在讲解需要说明的是,fastjson是根据getter和setter方法进行json序列化的,因此必须提供相应的getter和setter以确保序列化正常进行。

JSONObject实际上是一个map,且扩展了更多的操作。而JSONArray实际上是一个list,他是一个对于JSONObject对象的集合。

例子:

@Test
public void whenGenerateJson_thanGenerationCorrect() throws ParseException {
    JSONArray jsonArray = new JSONArray();
    for (int i = 0; i < 2; i++) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("AGE", 10);
        jsonObject.put("FULL NAME", "Doe " + i);
        jsonObject.put("DATE OF BIRTH", "2016/12/12 12:12:12");
        jsonArray.add(jsonObject);
    }
    String jsonOutput = jsonArray.toJSONString();
}

输出:

[
   {
      "AGE":"10",
      "DATE OF BIRTH":"2016/12/12 12:12:12",
      "FULL NAME":"Doe 0"
   },
   {
      "AGE":"10",
      "DATE OF BIRTH":"2016/12/12 12:12:12",
      "FULL NAME":"Doe 1"
   }
]

JSON字符串转换为Java对象

接下来将对如何解析JSON进行说明。有如下代码:

@Test
public void jsonToObject(String json) {
	Person person = JSON.parseObject(json, Person.class);
	System.out.print(person);
}

注意:在反序列化时,javaBean必须要有默认无参构造函数,否则会报异常:

com.alibaba.fastjson.JSONException: default constructor not found.

JSON.parseObject方法提供将JSON转为Java object的操作,但是他需要一个.class类作为一个参数以供甄别具体要转换到什么类型。

接下来做简单验证:

"Person [age=20, fullName=John Doe, dateOfBirth=Wed Jul 20 08:51:12 WEST 2016]"

则对以上代码的执行结果为:

person: age=20, fullName=John Doe, dateOfBirth=null
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值