如何使用 Jackson 的流 XML API 编写对象数组?我已经使用 JSON 做到了这一点,但 XML 却严重失败。 JSON 的工作概念证明:
List<Item> values = Arrays.asList(new Item("hello"), new Item("world"))
OutputStream stream = new ByteArrayOutputStream()
JsonFactory factory = new JsonFactory();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
factory.setCodec(objectMapper);
JsonGenerator generator = factory.createGenerator(stream, JsonEncoding.UTF8);
generator.writeStartArray();
for(Item value : values) {
generator.writeObject(value);
}
generator.writeEndArray();
generator.close();
我尝试使用相同的代码将生成器更改为 XML
XmlFactory factory = new XmlFactory();
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.enable(SerializationFeature.INDENT_OUTPUT);
factory.setCodec(xmlMapper);
ToXmlGenerator generator = factory.createGenerator(stream, JsonEncoding.UTF8);
我遇到这样的异常
com.fasterxml.jackson.core.JsonGenerationException: Trying to output second root, <Item>
我尝试过其他一些事情,例如设置下一个名称、写入对象的开始/结束,但我得到的只是不同的异常。
使用“generator.writeObject(values);”就足够了。
List<Item> values = Arrays.asList(new Item("hello"), new Item("world"));
XmlFactory factory = new XmlFactory();
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.enable(SerializationFeature.INDENT_OUTPUT);
factory.setCodec(xmlMapper);
ToXmlGenerator generator = factory.createGenerator(new File("test,xml"), JsonEncoding.UTF8);
generator.writeObject(values);
generator.close();
当我打开测试 xml 时,我看到了
<ArrayList>
<item>
<data>hello</data>
</item>
<item>
<data>world</data>
</item>
</ArrayList>
同样适用于 json
List<Item> values = Arrays.asList(new Item("hello"), new Item("world"));
JsonFactory factory = new JsonFactory();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
factory.setCodec(objectMapper);
JsonGenerator generator = factory.createGenerator(new File("test,json"), JsonEncoding.UTF8);
generator.writeObject(values);
generator.close();
测试.json
[ {
"data" : "hello"
}, {
"data" : "world"
} ]
这里是工作示例。