目前找到两个自定义的序列化手段。
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
ss2ws0br2#
补充如下:
String str = JSON.toJSONString(obj, SerializerFeature.WriteNullStringAsEmpty);
np8igboo3#
test demo 3939
fcy6dtqo4#
hi,我所遇到的问题是反序列化。json串转对象的时候,json串里面的null转成对象的可以转成空字符串("")。或者也可以提前操作,标准化json格式,将json串里面的null,转成""。String str = JSON.toJSONString(obj, SerializerFeature.WriteNullStringAsEmpty); obj传string进行格式化得到的str并不能再反序列化。异常java.lang.reflect.InvocationTargetException
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);
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);这个对字符串再处理并不能解决。
6条答案
按热度按时间sirbozc51#
hi @Hireek ,这个问题是支持的,可以通过SerializerFeature序列化属性来设置序列化,相关属性枚举如下:
ss2ws0br2#
补充如下:
np8igboo3#
test demo 3939
fcy6dtqo4#
hi,我所遇到的问题是反序列化。json串转对象的时候,json串里面的null转成对象的可以转成空字符串("")。或者也可以提前操作,标准化json格式,将json串里面的null,转成""。String str = JSON.toJSONString(obj, SerializerFeature.WriteNullStringAsEmpty); obj传string进行格式化得到的str并不能再反序列化。异常java.lang.reflect.InvocationTargetException
zkure5ic5#
@Hireek 从异常上看是反射的一个BUG,如果你有完整的test 示例你可以发出来, 另外你可以自定义一个ValueFilter尝试一下。
然后在 toJSONString add filter
jpfvwuh46#
@Jzow 测试用例如上,我想反序列化的时候null为“”。
String str = JSON.toJSONString(obj, filter, SerializerFeature.WriteNullStringAsEmpty);这个对字符串再处理并不能解决。