java - 通过 Jackson 将 Java 列表写入 JSON 数组

标签 java arrays json

我正在使用 Jackson 进行 JSON 序列化。我正在尝试将 Java 列表(包含字符串值)转换为 JSON 数组。我尝试了以下方法(下面针对每种方法给出了问题)

<强>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();

异常

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

我从“generator.writeString(arg)”得到异常。我不能使用 writeStringField。

对象映射器

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

这会将数组创建为字符串,而不是 JSON 对象中的数组(这是我想要实现的)。欢迎提出任何建议。

结束状态(试图达到):

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

最佳答案

通过围绕每个数组条目开始/结束一个对象,您正在做的是试图使 json 无效:

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

生成器正确地阻止了你这样做。

直接将字符串写入数组即可:

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

关于java - 通过 Jackson 将 Java 列表写入 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42864560/

相关文章:

java:如何为变量自动生成自定义方法

java - 垂直 recyclerView 和水平 recyclerview 一起滚动

java - 计算 "Flower Objects"数组中出现的次数

python - 加快 Python 循环追加速度

java - HttpMediaTypeNotSupportedException

python-3.x - 如何在 Python 中重新排列字节数组中的字节?

javascript - 如何从所有功能中返回单个字段?

Python3 requests 模块或 urllib.request 模块均检索不完整的 json

javascript - Angular 5 服务读取本地 .json 文件

java - Gerrit 的搜索查询