首页 > 解决方案 > JSONGenerator 如何在 JSON 中输出一个对象

问题描述

我想输出以下 JSON:

result: {
    "x": 11,
    "y": 10,
    "actions": [
    ],
    "localConfigurations": {
         "local1": {},
         "local2":  {}
    }
}

我有以下代码:

public class Configuration {
    private int fX;
    private int fY;
    private Actions[] fActions;
    private LinkedHashMap<String, LocalConfiguration> fLocalConfigurations = new LinkedHashMap<>();

    @JsonProperty("x")
    public int getX() { return fX; }
    public void setX(int x) { fX = x; }

    @JsonProperty("y")
    // getter and setter for y

    @JsonProperty("actions")
    // getter and setter for actions

    @JsonProperty("localConfigurations")
    // getter and setter for localConfigurations
}

下面是我试图用来输出 JSON 的代码:

    JsonFactory factory = new JsonFactory();
    JsonGenerator generator = factory.createGenerator(fOutputStream);

    generator.writeStartObject();
    generator.writeArrayFieldStart("result");

    if (configuration != null)
        mapper.writeValue(generator, configuration);

    generator.writeEndArray();
    generator.writeEndObject();
    generator.close();

但是,我的输出结果为:

result: [{
    "x": 11,
    "y": 10,
    "actions": [
    ],
    "localConfigurations": {
         "local1": {},
         "local2":  {}
    }
}]

我不确定如何在不使用 generator.writeArrayFieldStart 的情况下实现所需的输出。如果我只使用 writeStartObject 并转储对象配置,则 JSON 输出会引发一些错误。那么,我怎样才能得到我想要的输出呢?谢谢

标签: javajsonjackson

解决方案


您需要打开对象、写入属性、写入Configuration POJO和关闭对象。

generator.writeStartObject();
generator.writeFieldName("result");

objectMapper.writeValue(generator, configuration);

generator.writeEndObject();

推荐阅读