2012-09-26 4 views
8

여기 여기 내 코드입니다하지만 위의 출력을 생성하지 않는 것 내 원하는 출력Jackson을 사용하여이 json 문자열을 만드는 방법은 무엇입니까?

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

입니다. 이 작업을 수행 할 수있는 더 쉽고 간단한 방법이 있으면 알려 주시기 바랍니다. 감사합니다

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

왜 JSON 문자열을 작성하지 않으시겠습니까? –

+0

잘못하고 있습니다. 그냥 직접 String을 작성하거나 POJO를 사용하여 Jackson을 사용하여 직렬화하십시오. – Nishant

+7

나는 Nishant에 동의하지 않습니다. 이미 존재하는 도메인 객체를 직렬화하는 경우에만 의미가 있습니다. 왜 일부 JSON을 출력하기 위해 새로운 형식 계층 구조를 만들겠습니까 ?? –

답변

1

사용하여 POJO를
홈페이지

public class Main { 

    private Node node; 

    // getters/setters 

노드

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 

홀더

public class Holder { 

    private String value; 

    // getters/setters 

사용

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

나는 단순히 출력 JSON 파일 Reference JsonGenerator에 라인별로 작성합니다. 희망이 도움이 될 것입니다.

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

도움을 주셔서 감사합니다. – Andy

+3

@Andy는 문제를 해결 한 경우 대답을 수락하는 것을 고려합니다. – ssedano

+2

@Andy가이 답변으로 문제를 해결 했습니까? 그렇다면 받아들이십시오. – Matheus

관련 문제