fastjson 反序列化支持null转空字符串吗,如果支持该怎么做,

tjrkku2a  于 2021-11-27  发布在  Java
关注(0)|答案(6)|浏览(752)

目前找到两个自定义的序列化手段。

  1. ObjectDeserializer
  2. ExtraProcessable
    都不太适用。
sirbozc5

sirbozc51#

hi @Hireek ,这个问题是支持的,可以通过SerializerFeature序列化属性来设置序列化,相关属性枚举如下:

QuoteFieldNames   // 输出key时是否使用双引号,默认为true 
WriteMapNullValue     //是否输出值为null的字段,默认为false 
WriteNullNumberAsZero    //数值字段如果为null,输出为0,而非null 
WriteNullListAsEmpty   //List字段如果为null,输出为[],而非null 
WriteNullStringAsEmpty   //字符类型字段如果为null,输出为”“,而非null 
WriteNullBooleanAsFalse   //Boolean字段如果为null,输出为false,而非null
ss2ws0br

ss2ws0br2#

补充如下:

String str = JSON.toJSONString(obj, SerializerFeature.WriteNullStringAsEmpty);
fcy6dtqo

fcy6dtqo4#

hi,我所遇到的问题是反序列化。json串转对象的时候,json串里面的null转成对象的可以转成空字符串("")。或者也可以提前操作,标准化json格式,将json串里面的null,转成""。String str = JSON.toJSONString(obj, SerializerFeature.WriteNullStringAsEmpty); obj传string进行格式化得到的str并不能再反序列化。异常java.lang.reflect.InvocationTargetException

zkure5ic

zkure5ic5#

@Hireek 从异常上看是反射的一个BUG,如果你有完整的test 示例你可以发出来, 另外你可以自定义一个ValueFilter尝试一下。

private ValueFilter filter = new ValueFilter(){
        @Override
        public Object process(Object obj, String s, Object v){
            if(v == null){
                 return "";
            }
            return v;
        }
    };

然后在 toJSONString add filter

String str = JSON.toJSONString(obj, filter, SerializerFeature.WriteNullStringAsEmpty);
jpfvwuh4

jpfvwuh46#

@Data
public class FastjsonTestDto {
    private List<TestData> data;
}
@Data
public class TestData {
    private String id;

    private String title;
}
/**

* TestDemo
* 
* @author Hireek
* @date 2021-11-12 16:27
* /

public class FastJsonTest {
    @Test
    public void testFastJsonBug() {
        String rep = "{\"data\":[{\"id\":\"fe7cb187-2402-4a92-96b2-152e7b57b3f6\",\"title\":null}]}";
        FastjsonTestDto testDto = JSON.parseObject(rep, new TypeReference<>() {
        });
        System.out.println(testDto.toString());
    }
}

@Jzow 测试用例如上,我想反序列化的时候null为“”。
String str = JSON.toJSONString(obj, filter, SerializerFeature.WriteNullStringAsEmpty);这个对字符串再处理并不能解决。

相关问题