fastjson序列化时执行方法有哪些?过滤字段方法汇总

我们在进行FastJson序列化时,也就是转成JSON字符串时,总会要过滤一些字段,但是有些开发人员不知道该如何执行?下面来我们就来给大家讲解一下fastjson序列化时过滤字段方法。

方法一、FastJson的注解

@JSONField(serialize = false)2 private String name;

最便捷,直接在实体的字段上加FastJson的注解serialize = false,转JSON字符串时就不会有该字段。

方法二、JAVA关键字

@JSONField(name = "AGE")2 private transient String age;

在实体字段前面,使用transient关键字,表示该字段不参与序列化,转JSON字符串时就可以忽略掉该字段。因为是JAVA关键字所以也会影响该字段其他序列化操作。

方法三、FastJson的属性名过滤器

SimplePropertyPreFilter filter = new SimplePropertyPreFilter();2 
filter.getExcludes().add("PHONE");3 
System.out.println(JSONObject.toJSONString(u, filter));

通过SimplePropertyPreFilter过滤器,来过滤指定的属性名,然后在转JSON的时候,带上过滤器参数即可。

如果需要保留的参数比较少,也可以反过来,使用filter.getIncludes().add("PHONE");的方式来包含指定的字段。还可以直接在new的时候带上,这里是可变参数,所以可以同时指定多个,即如下这种写法:

SimplePropertyPreFilter filter = new SimplePropertyPreFilter("PHONE", 
"SEX");

注:这里的字段名为转成JSON后的key,不是实体的属性名。如例子中为大写SEX,而不是小写的sex。

方法四、FastJson的属性过滤器

PropertyFilter profilter = new PropertyFilter()
{
    @Override
    public boolean apply(Object object, String name, Object value)
    {
        if (name.equals("SEX"))
        {
            // false表示字段将被排除在外
            return false;
        }
        return true;
    }
};
System.out.println(JSON.toJSONString(u, profilter));

通过实现PropertyFilter接口的apply方法,来实现过滤属性,方法参数name即为字段的key,参数value即为字段的value,这种方式最强大,因为可以自定义具体过滤规则。方法返回false即为排除该字段。在转JSON的时候,带上过滤器参数即可。注:参数name指的字段名为转成JSON后的key,不是实体的属性名。如例子中为大写SEX,而不是小写的sex。

如果是JAVA8的话。可以使用lambda表达式,更简洁,如下:

PropertyFilter profilter = (object, name, value) - >
{
    if (name.equals("SEX"))
    {
        // false表示字段将被排除在外
        return false;
    }
    return true;
};

附上实体类做参考:

public class User
{
    @JSONField(name = "ID")
    private String id;
    @JSONField(serialize = false)
    private String name;
    @JSONField(name = "AGE")
    private transient String age;
    @JSONField(name = "SEX")
    private String sex;
    @JSONField(name = "PHONE")
    private String phone;
}

fastjson序列化时过滤字段可以采用以上四种方法,这样我们就可以保留需要的字段了,最后大家如果想要了解更多json相关知识,敬请关注奇Q工具网。

推荐阅读:

java泛型方法类型怎么指定?java泛型如何使用?

java中构造方法怎么写?java构造方法特征是什么?

json软件源地址是什么?json是用来干嘛的?