【问题标题】:How inline object via jackson JsonGenerator?如何通过jackson JsonGenerator 内联对象?
【发布时间】:2017-09-29 07:52:57
【问题描述】:

考虑例子:

import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;

import java.io.File;
import java.io.FileInputStream;

public class Exmaple {
    public static void main (String[] args) throws Exception {

        Object object = new Object() {
            private String id = "someId";
        };

        final JsonGenerator generator = new JsonFactory().createGenerator(System.out);
        generator.writeStartObject();
        generator.writeFieldName("data");
        generator.writeBinary(new FileInputStream(new File("D:\\!Temp\\elasticsearch\\pdf.pdf")), -1);
        generator.writeEndObject();
        generator.writeObject(object);
        generator.close();
    }
}

目标是在 json 流式传输期间添加来自 object 的所有字段。有了那个代码,我得到了:

{
  "data": "JVBERi0xLjMKJ="
} {
  "id": "someId",
}

如何告诉jackson 不要从对象中写入{}

更新

预期结果是(例如data + java 对象的所有键):

{
  "data": "JVBERi0xLjMKJ=",
  "id": "someId",
}

【问题讨论】:

  • 您提供了一个您不想要的数据示例(两个对象,因为您编写代码来生成两个对象,所以这完全可以理解)。那么你想要什么数据?也举个例子吧。
  • 问题已更新
  • 你总是可以使用ObjectMapper insteed。

标签: java json jackson jackson2


【解决方案1】:

只是不要在调用writeBinary 之后再调用writeEndObject() 它应该是这样的:

final JsonGenerator generator = new JsonFactory().createGenerator(System.out);
        generator.writeStartObject();
        generator.writeFieldName("data");
        generator.writeBinary(new FileInputStream(new File("D:\\!Temp\\elasticsearch\\pdf.pdf")), -1);
        generator.writeObject(object);
        generator.writeEndObject();
        generator.close();

【讨论】:

  • 导致插入没有字段名的对象。例如。 {} brase 被插入到 previuos 对象中。
猜你喜欢
  • 1970-01-01
  • 2020-10-01
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
  • 1970-01-01
  • 2021-10-28
  • 2021-06-03
相关资源
最近更新 更多