你如何通过Jackson的JsonGenerator编写原始JSON?

时间:2015-11-06 18:51:08

标签: java json jackson

我想使用Jackson API(JsonFactory,JsonGenerator)在以下结构中生成JSON字符串。我该怎么办?

预期:

{
    "api": {
        "Salutaion": "Mr",
        "name": "X"
    },
    "additional": {
        "Hello",
        "World"
    }
}

实际值:

{
    "api": "{
        \"Salutaion\": \"Mr\",
        \"name\": \"X\"
    }",
    "additional": "{
        \"Hello\",
        \"World\"
    }"
}

属性api&的值。另外我将以字符串形式提供给我。我应该使用writeObjectField(如下所示)?

jGenerator.writeObjectField("api", apiString);

构造jGenerator对象后,如何获得最终构造的JSON对象的字符串表示?

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
JsonGenerator jGenerator = jfactory.createJsonGenerator(outputStream);
           jGenerator.writeStartObject();

           jGenerator.writeObjectField("api", apiString);
           jGenerator.writeObjectField("additional", additionalString);

           jGenerator.writeEndObject();                    

           jGenerator.close();        
           outputStream.close();
           outputStream.toString()

outputStream.toString()给出一个json字符串,但apiString中的双引号(")前缀为转义字符\

这是正确的方法吗?

1 个答案:

答案 0 :(得分:14)

假设apiStringadditionalString是对具有JSON内容的String个对象的引用,您将要将它们原始写入,即。他们的内容直接。否则,您将它们序列化为JSON字符串,Jackson将需要转义任何相关字符。

例如

jGenerator.writeFieldName("api");
jGenerator.writeRawValue(apiString);

表示apiadditional表示相同。