fastJson

Author Avatar
丁起男 07月 13,2020
  • 在其它设备中阅读本文章

@JSONField

  • 作用范围:fieldsettergetter

  • 进行操作时是感觉getter和setter进行的,不依据field

  • 属性:

    属性作用
    ordinal配置序列化和反序列化的顺序
    name指定字段的名称
    format指定字段的格式,对日期格式有用
    serialize是否序列化
    deserialize是否反序列化
    jsonDirect当你有一个字段是字符串类型,里面是json格式数据,你希望直接输出,而不是经过转义后再输出
    serializeUsing定制属性序列化

@JSONGreator

  • 作用范围:构造方法
  • 当javabean没有默认构造方法,可用用来指定构造方法来创建java对象

@JSONPOJOBuilder

@JSONType

  • 作用范围:

  • 与@JSONField类似

  • 属性:

    属性作用
    ignores指定序列化时,不序列化的字段
    includes指定序列化时,序列化的字段
    serialzeFeatures策略

JSONPath

  • 可用在java框架中当作对象查询语言(OQL)来使用

  • 方法(静态):

    方法名作用
    eval求值
    size非空元素个数
    contains是否包含
    containsValue是否包含指定值
    set修改指定路径的值
    array_add在数组或者集合中添加元素
  • 示例(对象):

    //获取值
    System.out.println(JSONPath.eval(user,"$.name"));
    //是否包含
    System.out.println(JSONPath.contains(user,"$.name"));
    //是否包含指定值
    System.out.println(JSONPath.containsValue(user,"$.name",user.getName()));
    //有值的字段数量
    System.out.println(JSONPath.size(user,"$"));
    
  • 示例(集合):

    //获取下标1和2的元素
    System.out.println(JSONPath.eval(list,"[1,2]"));
    //获取下标0到2的元素
    System.out.println(JSONPath.eval(list,"[0:2]"));
    //获取指定元素集合
    System.out.println(JSONPath.eval(list,"$.name"));
    //条件过滤
    System.out.println(JSONPath.eval(list,"[id in (2)]"));
    System.out.println(JSONPath.eval(list,"[id = 3]"));
    

JSON

toJSONString()

  • 将java对象转换成json字符串

  • 示例:

    User user = getUser();
    String s = JSON.toJSONString(user);
    System.out.println(s);
    

writeJSONString()

  • 将json字符串放入流中,支持outputStream/Writer

  • 示例:

    PrintWriter pw = new PrintWriter(System.out);
    User user = getUser();
    JSON.writeJSONString(pw,user);
    

parseObject

  • 将json传转成对象

  • 示例:

    User user = getUser();
    String s = JSON.toJSONString(user);
    System.out.println(s);
    User user1 = JSON.parseObject(s, User.class);
    System.out.println(user1);
    

stream

JOSNWriter

  • 如果你的json格式是一个巨大的数组,有很多元素

  • 则先调用startArray,然后写入对象,然后endArray

  • 示例:

    JSONWriter writer = new JSONWriter(new FileWriter("F:\\array.json"));
            writer.startArray();
            for (User user : getUsers()){
                writer.writeValue(user);
            }
            writer.endArray();
            writer.close();
    
  • 如果你的json格式是一个巨大的对象,有很多key/value时

  • 则先调用startObject,然后写入对象,然后endObject

  • 示例:

    JSONWriter writer = new JSONWriter(new FileWriter("F:\\object.json"));
            writer.startObject();
            for (User user : getUsers()){
                writer.writeKey("key"+user.getId());
                writer.writeValue(user);
            }
            writer.endObject();
            writer.close();
    

JSONReader

  • 巨大对象json读取

  • 示例:

    JSONReader reader = new JSONReader(new FileReader("F:\\object.json"));
            reader.startObject();
            while (reader.hasNext()){
                String k = reader.readString();
                User user = reader.readObject(User.class);
                System.out.println(k+":"+user);
            }
            reader.endObject();
    
  • 巨大集合json读取

  • 示例:

    JSONReader reader = new JSONReader(new FileReader("F:\\array.json"));
            reader.startArray();
            while (reader.hasNext()){
                User user = reader.readObject(User.class);
                System.out.println(user);
            }
            reader.endArray();
    
    

ParseProcess

ExtraProcessor

  • 用于处理多余字段

ExtraTypeProvicer

  • 用于处理多余字段时提供类型信息

SerializeFilter

  • 通过编程方式定制序列化
  • 支持6中序列化方式
    • PropertyPerFilter:根据属性名判断是否序列化
    • PropertyFilter:根据属性名和值判断是否序列化
    • NameFilter:修改key
    • ValueFilter:修改value
    • BeforeFilter:序列化时在最前添加的内容
    • AfterFilter:序列化时在最后添加的内容

循环引用

  • 引用是通过“$ref”来表示

  • 描述

    符号作用
    "$ref":".."上一级
    "$ref":"@"当前对象,也就是自引用
    "$ref":"$"根对象
    "$ref":"$.children.0"基于路径的引用,相当于root.getChildren().get(0)

TypeReference

  • 如果需要一个带泛型的对象,例如List<User>,Map<String,User>

  • 示例:

    Map<String, String> stringStringMap = 
        JSON.parseObject(s, new TypeReference<Map<String, String>>() {});