程序的一部分将对象转换为YAML字符串。以下是一个最小示例,它产生的结果与我遇到的问题相同:
主要
ObjectMapper JSONExportMapper = new ObjectMapper(new YAMLFactory());
JSONExportMapper.setSerializationInclusion(Include.NON_NULL);
JSONExportMapper.setSerializationInclusion(Include.NON_EMPTY);
String export = JSONExportMapper.writeValueAsString(new Animals());
System.out.println(export);
动物
class Animals {
public Dog dog;
public Animals() {
this.dog = new Dog();
}
}
狗
class Dog {
public String sound = "";
}
问题:
您可以看到Dog
的属性sound
是一个空字符串。在我的Jackson设置中,我在Include.NON_EMPTY
中添加了setSerializationInclusion
和Include.NON_EMPTY
,这是为了防止将这些属性包含在YAML中。
没有---
dog:
sound: ""
Include.NON_EMPTY
使用---
dog: {}
Animals
问题:
即使对象完全为空,它仍然包含在YAML中,这对我来说没有意义。就我而言,Dog
和$line = Get-Content D:\tmp\test.txt | Select-String TextString | Select-Object -ExpandProperty Line
Get-Content D:\tmp\test.txt | ForEach-Object {$_ -replace $line,'TextString = VALUEIWANT'} | Set-Content D:\tmp\TEXTNEW.txt
是库中的类,我不应在其中更改任何代码。
我有什么要注意的吗?如何从生成的YAML字符串中删除完全为空的对象?
答案 0 :(得分:2)
似乎没有开箱即用的解决方案,所以我建议您应该实现自己的序列化器
public class MyDogSerializer extends StdSerializer<Dog> {
private static final long serialVersionUID = -4796382940375974812L;
public MyDogSerializer() {
super(Dog.class);
}
@Override
public void serialize(Dog value, JsonGenerator gen, SerializerProvider serializers)
throws IOException, JsonProcessingException {
if (/** here inspect Dog value for emptiness */) {
gen.writeObject(null);
} else {
****
}
}
}
并注释dog
属性
class Animals {
@JsonSerialize(using = MyDogSerializer.class)
public Dog dog;
public Animals() {
this.dog = new Dog();
}
}