【问题标题】:How can you write raw JSON through Jackson's JsonGenerator?如何通过 Jackson 的 JsonGenerator 编写原始 JSON?
【发布时间】:2015-11-06 18:51:08
【问题描述】:

我想使用 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 Object的String表示?

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 中的双引号 (") 以转义字符 \

为前缀

这是正确的方法吗?

【问题讨论】:

  • 是的,它是正确的,除非它是无效的
  • 其实 apiString 是一个 JSON 字符串。我应该使用 writeTree() 来确保我得到问题中描述的最终字符串吗?
  • 我不明白。 apiString 是什么?是包含 JSON 内容的 String 吗?
  • yes , {"Salutaion": "Mr","name": "X"} 是 apiString String 变量的值。

标签: java json jackson


【解决方案1】:

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

例如

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

对于api,同样对于additional

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-01
    • 2017-08-29
    • 2023-04-06
    • 2015-06-30
    • 2011-06-14
    • 2022-01-05
    相关资源
    最近更新 更多