如何使用 Jackson 创建无名 Json 数组

use*_*610 2 json jackson

需要以下 JSON:

{[{"value":"1"}, {"value":"2"}, {"value":"3"}, {"value":"4"value}]}
Run Code Online (Sandbox Code Playgroud)

使用:

    JsonGenerator generator = factory.createGenerator(os, JsonEncoding.UTF8);) {
    generator.writeStartObject();
    generator.writeFieldName("data");
    generator.writeStartArray();
    while (rs.next()) {
        generator.writeStartObject();
        generator.writeStringField("value", rs.getString("value"));
        generator.writeEndObject();
    }
    generator.writeEndArray(); 
    generator.writeEndObject();
    generator.close();
Run Code Online (Sandbox Code Playgroud)

输出:

{"data":[{"value":"1"}, {"value":"2"}, {"value":"3"}, {"value":"4"value}]}
Run Code Online (Sandbox Code Playgroud)

我不需要数据标签,但如果

generator.writeFieldName("data");
Run Code Online (Sandbox Code Playgroud)

删除后,会抛出以下错误:

com.fasterxml.jackson.core.JsonGenerationException: Can not start an array, expecting field name (context: Object)
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?

谢谢

Krz*_*ski 5

看来您可能只想省略根对象声明并将其保留为数组,因为它不是有效的 json 格式。

JsonGenerator generator = factory.createGenerator(os, JsonEncoding.UTF8);
generator.writeStartArray();
while (rs.next()) {
    generator.writeStartObject();
    generator.writeStringField("value", rs.getString("value"));
    generator.writeEndObject();
}
generator.writeEndArray(); 
generator.close();
Run Code Online (Sandbox Code Playgroud)

这将返回有效json格式为:

[{"value":"1"}, {"value":"2"}, {"value":"3"}, {"value":"4"}]
Run Code Online (Sandbox Code Playgroud)