简体   繁体   English

通过Jackson将Java List写入JSON Array

[英]write Java List to JSON Array via Jackson

I am using Jackson for JSON serialization. 我正在使用Jackson进行JSON序列化。 I am trying to convert a Java List (containing string values) to a JSON array. 我试图将Java List(包含字符串值)转换为JSON数组。 I tried the following approaches (issues given below for each) 我尝试了以下方法(下面给出了每个问题)

1. write array elements using JsonGenerator's writeString 1.使用JsonGenerator的writeString编写数组元素

final JsonGenerator generator = factory.createGenerator(output, JsonEncoding.UTF8);
  generator.writeStartArray();
        for (String arg: argsList) {
            generator.writeStartObject();
            log.info("arg value is {}", arg);
            generator.writeString(arg);
            generator.writeEndObject();
        }
        generator.writeEndArray();

Exception 例外

Can not write a string, expecting field name (context: Object)

I get the exception from "generator.writeString(arg)". 我从“generator.writeString(arg)”中得到了异常。 I cannot use writeStringField. 我不能使用writeStringField。

object mapper 对象映射器

ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(out, argsList);
            final byte[] argsBytes = out.toByteArray();
            generator.writeFieldName("args");
            generator.writeObjectField("args", argsBytes) 

This creates the array as a String and not an array within the JSON object (which is what I am trying to achieve). 这会将数组创建为String而不是JSON对象中的数组(这是我想要实现的)。 Any suggestions would be welcome. 欢迎大家提出意见。

End state (trying to achieve): 结束状态(试图实现):

{
"args":["abc","def","ghi","jkl","mno"]
}

By starting/ending an object around each array entry what you are doing is trying to make invalid json: 通过在每个数组条目周围开始/结束一个对象,你正在尝试制作无效的json:

{
    "args":[{"abc"},{"def"},{"ghi"},{"jkl"},{"mno"}]
}

And the generator is rightly stopping you from doing this. 而发电机正在阻止你做这件事。

Just write the strings directly into the array: 只需将字符串直接写入数组:

final JsonGenerator generator = factory.createGenerator(output, JsonEncoding.UTF8);
generator.writeStartArray();
for (String arg: argsList) {
    generator.writeString(arg);
}
generator.writeEndArray();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM