2015-11-06 65 views
5

我想使用Jackson API(JsonFactory,JsonGenerator)在以下結構中生成JSON字符串。我該怎麼做 ?如何通過Jackson的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

是的它是正確的,除非它是無效的 – meda

+0

實際上,apiString是一個JSON字符串。我應該使用writeTree()來確保我得到問題中描述的最終字符串? – yathirigan

+0

我不明白。什麼是'apiString'?它是一個包含JSON內容的字符串嗎? –

回答

11

假設apiStringadditionalStringString對象與JSON內容的引用,你會想要寫他們生的,即它們的內容直接。否則,你序列化他們作爲JSON字符串和傑克遜將需要避免任何相關的字符。

例如

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

api,與同爲additional

+0

謝謝..我在想這是一個json對象,並使用writeObject。你的方法奏效了。 – yathirigan