Java 如何通过Jackson';他是杰松发电机吗?

Java 如何通过Jackson';他是杰松发电机吗?,java,json,jackson,Java,Json,Jackson,我想使用jacksonapi(JsonFactory,JsonGenerator)在以下结构中生成一个JSON字符串。我怎么做 预期: { "api": { "Salutaion": "Mr", "name": "X" }, "additional": { "Hello", "World" } } 实际: { "api": "{ \"Salutaion\": \"Mr\",

我想使用jacksonapi(JsonFactory,JsonGenerator)在以下结构中生成一个JSON字符串。我怎么做

预期:

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

{
    "api": "{
        \"Salutaion\": \"Mr\",
        \"name\": \"X\"
    }",
    "additional": "{
        \"Hello\",
        \"World\"
    }"
}
属性api和additional的值将作为字符串提供给我。我是否应该使用WriteObject字段(如下所示)

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

toString()提供了一个json字符串,但apiString中的双引号(“)以转义字符作为前缀\


这是正确的方法吗?

假设
apiString
additionalString
是对包含JSON内容的
String
对象的引用,您将希望将其原始写入,即直接写入内容。否则,您将其序列化为JSON字符串,Jackson将需要转义任何相关字符

比如说

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

对于
api
,对于
additional

也是一样,它是正确的,除非它是无效的,否则apiString是一个JSON字符串。我应该使用writeTree()吗为了确保得到问题中描述的最后一个字符串?我不明白。什么是
apiString
?它是包含JSON内容的
string
?是的,{“sallaion”:“Mr”,“name”:“X”}是apiString字符串变量的值。
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()
jGenerator.writeFieldName("api");
jGenerator.writeRawValue(apiString);