我想使用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中的双引号(")前缀为转义字符\
这是正确的方法吗?
答案 0 :(得分:14)
假设apiString
和additionalString
是对具有JSON内容的String
个对象的引用,您将要将它们原始写入,即。他们的内容直接。否则,您将它们序列化为JSON字符串,Jackson将需要转义任何相关字符。
例如
jGenerator.writeFieldName("api");
jGenerator.writeRawValue(apiString);
表示api
,additional
表示相同。