4
目前找到两个自定义的序列化手段。
- ObjectDeserializer
- ExtraProcessable 都不太适用。
目前找到两个自定义的序列化手段。
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
补充如下:
String str = JSON.toJSONString(obj, SerializerFeature.WriteNullStringAsEmpty);
test demo 3939
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
hi,我所遇到的问题是反序列化。json串转对象的时候,json串里面的null转成对象的可以转成空字符串("")。或者也可以提前操作,标准化json格式,将json串里面的null,转成""。String str = JSON.toJSONString(obj, SerializerFeature.WriteNullStringAsEmpty); obj传string进行格式化得到的str并不能再反序列化。异常java.lang.reflect.InvocationTargetException
@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);
@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);这个对字符串再处理并不能解决。
@Hireek 请问你找到办法了吗?
not yet