2012-09-26 9 views
8

Hier ist meine gewünschte AusgabeWie erstellt man diese JSON-Zeichenkette mit Jackson?

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

mein Code hier aber es scheint nicht, die Ausgabe über zu erzeugen. Wenn es einen besseren und einfacheren Weg gibt, lass es mich wissen. Dank

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

Warum gehst du nicht einfach die JSON-String schreiben? –

+0

Sie machen es falsch. Entweder schreibst du den String selbst, oder du verwendest einen POJO und serialisierst ihn mit Jackson. – Nishant

+7

Ich stimme nicht mit Nishant überein. Dies ist nur sinnvoll, wenn Sie bereits vorhandene Domänenobjekte serialisieren. Warum würden Sie eine neue Typhierarchie erstellen, nur um einige JSON zu pumpen? –

Antwort

1

Mit POJOs
Haupt

public class Main { 

    private Node node; 

    // getters/setters 

Knoten

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 

Halter

public class Holder { 

    private String value; 

    // getters/setters 

Nutzungs

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

ich einfach Zeile für Zeile schreiben, um Ihre Ausgabe JSON-Datei Reference JsonGenerator. Hoffe es wird helfen.

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

Vielen Dank für Ihre Hilfe – Andy

+3

@Andy in Betracht ziehen, die Antwort zu akzeptieren, wenn es Ihr Problem gelöst hat. – ssedano

+2

@Andy hat diese Antwort Ihr Problem gelöst? Wenn ja, akzeptiere es bitte – Matheus

Verwandte Themen