4
2
0
2

FastJson笔记

FastJson笔记

1、简介

2、优点

2.1 速度快

FastJson相对其他JSON库的特点是快,从2011年FastJson发布1.1.x版本之后,其性能从未被其他java实现的JSON库超越。

2.2 使用广泛

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

2.3 测试完备

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

2.4 使用简单

FastJson的API十分简洁。

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

2.5 功能完备

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

3、下载

4、使用

4.1 Java对象 转成 JSON字符串

Student stu = new Student();
stu.setName("张三");
stu.setAge(15);
stu.setAddress("成都");

// java对象 转换成 JSON 字符串
String jsonString = JSON.toJSONString(stu);
System.out.println(jsonString); // {"address":"成都","age":15,"name":"张三"}

4.2 list集合转JSON格式的字符串

@Test
public void test1() {
    // List集合转 JSON字符串
    ArrayList<Student> list = new ArrayList<>();
    Student stu1 = new Student();
    stu1.setId(1);
    stu1.setAge(22);
    stu1.setName("king");
    stu1.setFlag(true);
    stu1.setAddress("成都");

    Student stu2 = new Student();
    stu2.setId(2);
    stu2.setAge(24);
    stu2.setName("green");
    stu2.setFlag(false);
    stu2.setAddress("重庆");
    list.add(stu1);
    list.add(stu2);

    String jsonString = JSON.toJSONString(list,SerializerFeature.PrettyFormat);
    System.out.println(jsonString);
}
/*
[
	{
		"address":"成都",
		"age":22,
		"flag":true,
		"id":1,
		"name":"king"
	},
	{
		"address":"重庆",
		"age":24,
		"flag":false,
		"id":2,
		"name":"green"
	}
]
*/

4.3 Map集合转成 JSON字符串

@Test
public void test2() {
    
     // Map集合 转JSON格式字符串
    HashMap<String, Student> map = new HashMap<>();

    Student stu1 = new Student();
    stu1.setId(1);
    stu1.setAge(22);
    stu1.setName("king");
    stu1.setFlag(true);
    stu1.setAddress("成都");

    Student stu2 = new Student();
    stu2.setId(2);
    stu2.setAge(24);
    stu2.setName("green");
    stu2.setFlag(false);
    stu2.setAddress("重庆");

    map.put("stu1", stu1);
    map.put("stu2", stu2);

    String jsonString = JSON.toJSONString(map,SerializerFeature.PrettyFormat);
    System.out.println(jsonString);
}
/*
{
	"stu2":{
		"address":"重庆",
		"age":24,
		"flag":false,
		"id":2,
		"name":"green"
	},
	"stu1":{
		"address":"成都",
		"age":22,
		"flag":true,
		"id":1,
		"name":"king"
	}
}

*/

4.4 JSON字符串 转换成 Java对象 parseObject

String data = "{\"address\":\"成都\",\"age\":15,\"name\":\"张三\"}";
JSONObject parseObject = JSON.parseObject(data);
// System.out.println(parseObject);
String address = parseObject.getString("address");
Integer age = parseObject.getInteger("age");
System.out.println(address); // 成都
System.out.println(age);  // 15

4.5 JSON字符串 转成 List集合

@Test
public void test3() {
    // JSON格式字符串转成List 集合
    String jsonString = "[{\"address\":\"成都\",\"age\":22,\"flag\":true,\"id\":1,\"name\":\"king\"},{\"address\":\"重庆\",\"age\":24,\"flag\":false,\"id\":2,\"name\":\"green\"}]";

    List<Student> students = JSON.parseArray(jsonString, Student.class);
    for (Student stu :students) {
        System.out.println(stu);
    }
}

/*
Student(id=1, age=22, name=king, address=成都, flag=true)
Student(id=2, age=24, name=green, address=重庆, flag=false)
*/

4.6 JSON字符串 转成 Map集合

@Test
public void test4() {
    // JSON格式字符串转成 Map集合
    String jsonString = "{\"stu2\":{\"address\":\"重庆\",\"age\":24,\"flag\":false,\"id\":2,\"name\":\"green\"},\"stu1\":{\"address\":\"成都\",\"age\":22,\"flag\":true,\"id\":1,\"name\":\"king\"}}";

    Map<String,Student> map = JSON.parseObject(jsonString, new TypeReference<HashMap<String, Student>>(){} );
    System.out.println(map);
}
/*
{
    stu2=Student(id=2, age=24, name=green, address=重庆, flag=false), 
    stu1=Student(id=1, age=22, name=king, address=成都, flag=true)
}
*/

5. @JSONField注解的使用

5.1 @JSONField注解的使用

@JSONField注解 可以用在 方法(method),属性(field)以及方法中的参数(parameter)上

JSONField注解的源码

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
public @interface JSONField {
    int ordinal() default 0;   // 配置序列化和反序列化的顺序

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

    String format() default "";  // 指定字段的格式,对⽇期格式有⽤

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

    boolean deserialize() default true;  // 是否反序列化
	// 可以通过serialzeFeatures、parseFeatures的属性值SerializerFeature.WriteMapNullValue来控制
    SerializerFeature[] serialzeFeatures() default {}; // 控制序列化的一些规则

    Feature[] parseFeatures() default {}; // 控制序列化的一些规则

    String label() default "";

    boolean jsonDirect() default false;

    Class<?> serializeUsing() default Void.class;

    Class<?> deserializeUsing() default Void.class;

    String[] alternateNames() default {};

    boolean unwrapped() default false;

    String defaultValue() default "";
}

posted @ 2021-04-06 13:58  CoderTL  阅读(54)  评论(0编辑  收藏  举报