Java处理JSON数据 ── Fastjson的使用

Fastjson简介:

Fastjson是一个Java库,可用于将Java对象转换为其JSON表示形式。它还可以用于将JSON字符串转换为等效的Java对象。Fastjson可以与任意Java对象一起使用,包括您没有源代码的现有对象。

Fastjson目标

  • 在服务器端和android客户端中提供最佳性能。
  • 提供简单的toJSONString()和parseObject()方法,将Java对象转换为JSON,反之亦然。
  • 允许将现有的不可修改的对象与JSON相互转换。
  • Java泛型的广泛支持。
  • 允许对象的自定义表示。
  • 支持任意复杂的对象(具有深层次的继承层次结构和泛型类型的广泛使用)。

目前,在比较流行的Jackson、Gson、Fastjson三个json库中,Fastjson性能是最快的,但是Fastjson存在高危漏洞,不建议生产使用。Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。


Maven依赖:

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

实体类:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User{

    private int id;
    private String name;
    private int age;
}

对象转换成json:

    //将对象转换成json
    private static String tojson() {
    	User user = new User(12, "中国1", 19);
        //格式化json,默认是false
        String str = JSON.toJSONString(user, true);
        //非格式化json
        //String str = JSON.toJSONString(user,false);
        //String str = JSON.toJSONString(user);
        System.out.println(str);
        return str;
    }

在这里插入图片描述


json转换成对象:

//对象转换json
    private static void parseobject() {
        String json = tojson();
        User user = JSON.parseObject(json, User.class);
        System.out.println(user.toString());
    }

复杂对象(List、Set、Map) 转json:

//复杂对象转json
    private static String tojsoncomplex(){
    	User user = new User(12, "中国1", 19);
    	User user1 = new User(13, "中国2", 20);
    	User user2 = new User(14, "中国3", 21);
        List list = new ArrayList();
        list.add(user);
        list.add(user1);
        list.add(user2);
        Map map = new HashMap();
        map.put("test","test");
        map.put("user",list);
        String str = JSON.toJSONString(map);
        System.out.println(str);
        return str;
    }

json转换成复杂对象:

private static void parseobjectcomplex(){
        String json = tojsoncomplex();
        Map map = JSON.parseObject(json,new TypeReference<Map>(){});
        System.out.println(map);
    }

获取json字符串中的属性:

		String json = tojsoncomplex();
		JSONObject jsonObject = JSON.parseObject(json);
        String test = jsonObject.getString("test");
        List list = jsonObject.getJSONArray("user");
        System.out.println(list);
        System.out.println(test);

去除json字符串的某个属性:

		String json = tojsoncomplex();
		JSONObject jsonObject = JSON.parseObject(json);
        jsonObject.remove("test");
        System.out.println(jsonObject.toString());

增加json字符串属性:

		String json = tojsoncomplex();
		JSONObject jsonObject = JSON.parseObject(json);
     	jsonObject.put("test2", "test2");
        System.out.println(jsonObject.toString());

修改json字符串属性: 同增加属性方法一样


判断属性或值是否存在:

	String json = tojsoncomplex();
	JSONObject jsonObject = JSON.parseObject(json);
	List list = jsonObject.getJSONArray("user");
	System.out.println(jsonObject.containsKey("test2"));
    System.out.println(jsonObject.containsValue(list));

json日期格式:

String str = JSON.toJSONStringWithDateFormat(new Date(), "yyyy-MM-dd HH:mm:ss.SSS");
System.out.println(str);

Fastjson默认的空值处理:

在Fastjson中,默认情况下是不输出空值(NULL)的。无论Map中的NULL和对象属性中的NULL,序列化的时候都会被忽略不输出,这样会减少产生文本的大小。

如果要输出空值:需要设置SerializerFeature常量值来控制NULL值的输出

在这里插入图片描述

		User user3 = new User();
        user3.setAge(22);
        user3.setId(15);
        //改为不忽略NULL值
        String jsonstring = JSON.toJSONString(user3, SerializerFeature.WriteMapNullValue);
        System.out.println(jsonstring);

fastjson还有两个常用的注解

@JSONField: 配置在字段或者getter/setter方法上

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

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

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

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

    // 是否反序列化
    boolean deserialize() default true;
}
public class VO {
     @JSONField(name="ID",deserialize=false)
     private int id;

     @JSONField(name="birthday",format="yyyy-MM-dd",serialize=false)
     public Date date;
     
     @JSONField(ordinal = 3)
     private int f0;

     @JSONField(ordinal = 2)
     private int f1;

     @JSONField(ordinal = 1)
     private int f2;
}

**@JSONType**注解和@JSONField注解的作用类似,但@JSONType是配置在类上。
//不序列化studentAge和studentGender属性
@JSONType(ignores = {"studentAge","studentGender"})
public class Student {
    private String studentName;
    private Integer studentAge;
    private String studentGender;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值