2012-09-26 9 views
8

Aquí está mi salida deseada¿Cómo crear esta cadena json usando Jackson?

{"node":{"type":"community","field_incentives":{"und":[{"value":"fun"},{"value":"nice"}]},"field_community_email":{"und":[{"value":"[email protected]"}]}}} 

Aquí está mi código, pero no parece generar la salida anterior. Si hay una manera mejor y más simple de hacerlo, házmelo saber. Gracias

ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
JsonFactory f = new JsonFactory(); 
JsonGenerator g = f.createJsonGenerator(outputStream); 
g.writeStartObject(); 
g.writeObjectFieldStart("node"); 
g.writeStringField("type", "community"); 
g.writeObjectFieldStart("field_incentives"); 
g.writeFieldName("und"); 
g.writeStartArray(); 
???I don't know how to make [{"value":"fun"},{"value":"nice"}] 
g.writeEndArray(); 
g.writeEndObject(); 
g.close(); 
+0

¿Por qué no escribe la cadena JSON? –

+0

Lo estás haciendo mal. O solo escribe el String por ti mismo, o usa un POJO y serialízalo usando Jackson. – Nishant

+7

No estoy de acuerdo con Nishant. Eso solo tiene sentido si está serializando objetos de dominio ya existentes. ¿Por qué crearía una nueva jerarquía de tipos solo para bombear algo de JSON? –

Respuesta

1

Uso de POJOs
principal

public class Main { 

    private Node node; 

    // getters/setters 

Nodo

public class Node { 

    private String type; 

    private FieldIncentives field_incentives; 

    private FieldIncentives field_community_email; 

    // getters/setters 

FieldIncentives

public class FieldIncentives { 

    private List<Holder> und; 

    // getters/setters 

titular

public class Holder { 

    private String value; 

    // getters/setters 

Uso

final ObjectMapper o = new ObjectMapper(); 
final Main m = o.readValue(new File("exampleJson.json"), Main.class); 
9

Simplemente escribo línea por línea a su archivo de salida JSON Reference JsonGenerator. Espero que ayude

import java.io.File; 
import java.io.IOException; 
import org.codehaus.jackson.JsonEncoding; 
import org.codehaus.jackson.JsonFactory; 
import org.codehaus.jackson.JsonGenerationException; 
import org.codehaus.jackson.JsonGenerator; 
import org.codehaus.jackson.map.JsonMappingException; 

public class CopyOfJacksonStreamExample { 
    public static void main(String[] args) { 

    try { 

    JsonFactory jfactory = new JsonFactory(); 

    /*** write to file ***/ 
    JsonGenerator jGenerator = jfactory.createJsonGenerator(new File(
      "c:\\user.json"), JsonEncoding.UTF8); 
    jGenerator.writeStartObject(); // { 

    jGenerator.writeObjectFieldStart("node"); // node: { 
    jGenerator.writeStringField("type", "community"); // "type" : "community" 

    jGenerator.writeObjectFieldStart("field_incentives"); // "field_incentives" : { 
    jGenerator.writeFieldName("und"); // "und" : 
    jGenerator.writeStartArray(); // [ 
    jGenerator.writeStartObject(); // { 
    jGenerator.writeStringField("value", "fun"); // "value" : "fun" 
    jGenerator.writeStringField("value", "nice"); // "value" : "nice" 
    jGenerator.writeEndObject(); // } 
    jGenerator.writeEndArray(); // ] 
    jGenerator.writeEndObject(); // } end of field_incentives 

    jGenerator.writeObjectFieldStart("field_community_email"); // "field_community_email" : { 
    jGenerator.writeFieldName("und"); // "und" : 
    jGenerator.writeStartArray(); // [ 
    jGenerator.writeStartObject(); // { 
    jGenerator.writeStringField("value", "[email protected]"); // "value" : "fun" 
    jGenerator.writeEndObject(); // } 
    jGenerator.writeEndArray(); // ] 
    jGenerator.writeEndObject(); // } end of field_community_email 

    jGenerator.writeEndObject(); // } end of node 
    jGenerator.writeEndObject(); // } 

    jGenerator.close(); 

    } catch (JsonGenerationException e) { 

    e.printStackTrace(); 

    } catch (JsonMappingException e) { 

    e.printStackTrace(); 

    } catch (IOException e) { 

    e.printStackTrace(); 

    } 

    } 

} 
+1

Gracias a todos por su ayuda – Andy

+3

@Andy considere aceptar la respuesta si resolvió su problema. – ssedano

+2

@Andy ¿esta respuesta resolvió su problema? Si es así, acéptalo por favor – Matheus

Cuestiones relacionadas