2015-11-06 16 views
5

Voglio generare una stringa JSON nella seguente struttura usando l'API Jackson (JsonFactory, JsonGenerator). Come posso farlo ?Come si può scrivere JSON raw attraverso JsonGenerator di Jackson?

attesi:

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

attuale:

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

I valori degli attributi api & supplementari saranno disponibili per me come stringa. Dovrei usare writeObjectField (come segue)?

jGenerator.writeObjectField("api", apiString); 

Dopo la creazione dell'oggetto jGenerator, come faccio a ottenere rappresentazione String finale costruito JSON di oggetto?

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() 

L'outputStream.toString() dà una stringa JSON, ma le doppie virgolette (") nel apiString sono sempre prefisso un carattere di escape \

E 'questo il modo giusto?

+0

sì è giusto, a meno che non sia valido – meda

+0

in realtà, apiString è una stringa JSON. Dovrei usare writeTree() per assicurarmi di ottenere la stringa finale come mostrato nella domanda? – yathirigan

+0

Non capisco. Cos'è 'apiString'? È un 'String' che contiene contenuti JSON? –

risposta

11
Supponendo che apiString e additionalString siano riferimenti a oggetti String con contenuto JSON, è necessario scriverli in modo raw, cioè direttamente il loro contenuto, altrimenti li si serializzerà come stringhe JSON e Jackson dovrà sfuggire a qualsiasi carattere pertinente.

Ad esempio

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

per api, e lo stesso per additional.

+0

grazie .. stavo pensando che sia un oggetto json e che usi writeObject. Il tuo approccio ha funzionato. – yathirigan

Problemi correlati