fastjson

作者: 小明17 | 来源:发表于2020-05-15 16:13 被阅读0次

    maven:

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

    java对象转json格式字符串:

    JSON.toJSONString(Object o)

    可以自定义输出,控制字段顺序,日期格式,是否序列化等,例如:

    @JSONField(name="AGE", serialize=false)
    private int age;
     
    @JSONField(name="LAST NAME", ordinal = 2)
    private String lastName;
     
    @JSONField(name="FIRST NAME", ordinal = 1)
    private String firstName;
     
    @JSONField(name="DATE OF BIRTH", format="dd/MM/yyyy", ordinal = 3)
    private Date dateOfBirth;
    

    @JSONField 可作用于对象的字段 或者Getter,Setter

    注意:FastJson 在进行操作时,是根据 getter 和 setter 的方法进行的,并不是依据 Field 进行。
    注意:若属性是私有的,必须有 set 方法。否则无法反序列化。

    JSON 字符串转换为 Java 对象:

    JSON.parseObject(jsonStr, ObjectName.class);

    注意反序列化时为对象时,必须要有默认无参的构造函数,否则会报异常

    使用 ContextValueFilter 配置 JSON 转换

    在某些场景下,对Value做过滤,需要获得所属JavaBean的信息,包括类型、字段、方法等:

    @Test
    public void givenContextFilter_whenJavaObject_thanJsonCorrect() {
        ContextValueFilter valueFilter = new ContextValueFilter () {
            public Object process(
              BeanContext context, Object object, String name, Object value) {
                if (name.equals("DATE OF BIRTH")) {
                    return "NOT TO DISCLOSE";//设置value的值
                }
                if (value.equals("John")) {
                    return ((String) value).toUpperCase();//转换value
                } else {
                    return null;
                }
            }
        };
        String jsonOutput = JSON.toJSONString(listOfPersons, valueFilter);
    }
    

    使用 NameFilter 和 SerializeConfig

    NameFilter: 序列化时修改 Key。
    SerializeConfig:内部是个map容器主要功能是配置并记录每种Java类型对应的序列化类。

    @Test
    public void givenSerializeConfig_whenJavaObject_thanJsonCorrect() {
        NameFilter formatName = new NameFilter() {
            public String process(Object object, String name, Object value) {
                return name.toLowerCase().replace(" ", "_");
            }
        };
         
        SerializeConfig.getGlobalInstance().addFilter(Person.class,  formatName);
        String jsonOutput =
          JSON.toJSONStringWithDateFormat(listOfPersons, "yyyy-MM-dd");
    }
    

    相关文章

      网友评论

          本文标题:fastjson

          本文链接:https://www.haomeiwen.com/subject/txgcohtx.html