Jackson XML 写入流数组

问题描述 投票:0回答:1

如何使用 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>

我尝试过其他一些事情,例如设置下一个名称、写入对象的开始/结束,但我得到的只是不同的异常。

java xml jackson
1个回答
0
投票

使用“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"
} ]

这里是工作示例。

© www.soinside.com 2019 - 2024. All rights reserved.