prosource

Jackson - Java 목록을 json 배열에 쓰는 가장 좋은 방법

probook 2023. 2. 8. 18:05
반응형

Jackson - Java 목록을 json 배열에 쓰는 가장 좋은 방법

Jackson을 사용하여 ArrayList를 JsonArray로 변환합니다.

Event.java : JsonProperty로 매핑된 두 개의 필드 "field1", "field2"를 가진 Java bean 클래스입니다.

목표는 다음과 같습니다.

변환

ArrayList<Event> list = new ArrayList<Event>();
    list.add(new Event("a1","a2"));
    list.add(new Event("b1","b2"));

로.

[
{"field1":"a1", "field":"a2"},
{"field1":"b1", "field":"b2"}
]

생각할 수 있는 방법은 writeList 입니다.ToJsonArray():

public void writeListToJsonArray() throws IOException {  
    ArrayList<Event> list = new ArrayList<Event>();
    list.add(new Event("a1","a2"));
    list.add(new Event("b1","b2"));

    OutputStream out = new ByteArrayOutputStream();

    JsonFactory jfactory = new JsonFactory();
    JsonGenerator jGenerator = jfactory.createJsonGenerator(out, JsonEncoding.UTF8);
    ObjectMapper mapper = new ObjectMapper();
    jGenerator.writeStartArray(); // [

    for (Event event : list) {
        String e = mapper.writeValueAsString(event);
        jGenerator.writeRaw(usage);
        // here, big hassles to write a comma to separate json objects, when the last object in the list is reached, no comma 
    }

    jGenerator.writeEndArray(); // ]

    jGenerator.close();

    System.out.println(out.toString());
}

다음과 같은 것을 찾고 있습니다.

generator.write(out, list)  

목록을 json 배열 형식으로 직접 변환한 다음 출력 스트림 "out"에 씁니다.

더 탐욕스럽다:

generator.write(out, list1)

generator.write(out, list2)

list1, list2를 단일 json 배열로 변환/추가하기만 하면 됩니다.'아웃'에 씁니다.

이것은 너무 복잡합니다.Jackson은 일반 오브젝트를 처리하는 것과 마찬가지로 작성기 메서드로 목록을 처리합니다.제가 당신의 질문을 오해하지 않았다면, 이 방법은 당신에게 도움이 될 것입니다.

public void writeListToJsonArray() throws IOException {  
    final List<Event> list = new ArrayList<Event>(2);
    list.add(new Event("a1","a2"));
    list.add(new Event("b1","b2"));

    final ByteArrayOutputStream out = new ByteArrayOutputStream();
    final ObjectMapper mapper = new ObjectMapper();

    mapper.writeValue(out, list);

    final byte[] data = out.toByteArray();
    System.out.println(new String(data));
}

못 찾겠어toByteArray()@atrioom이 말했듯이, 그래서 저는StringWriter, 시험해 보세요:

public void writeListToJsonArray() throws IOException {  

    //your list
    final List<Event> list = new ArrayList<Event>(2);
    list.add(new Event("a1","a2"));
    list.add(new Event("b1","b2"));


    final StringWriter sw =new StringWriter();
    final ObjectMapper mapper = new ObjectMapper();
    mapper.writeValue(sw, list);
    System.out.println(sw.toString());//use toString() to convert to JSON

    sw.close(); 
}

아니면 그냥 쓰거나ObjectMapper#writeValueAsString:

    final ObjectMapper mapper = new ObjectMapper();
    System.out.println(mapper.writeValueAsString(list));

objectMapper에는 객체를 파라미터로 받아들이는 writeValueAsString()이 있습니다.매개 변수가 문자열을 다시 가져올 때 개체 목록을 전달할 수 있습니다.

List<Apartment> aptList =  new ArrayList<Apartment>();
    Apartment aptmt = null;
    for(int i=0;i<5;i++){
         aptmt= new Apartment();
         aptmt.setAptName("Apartment Name : ArrowHead Ranch");
         aptmt.setAptNum("3153"+i);
         aptmt.setPhase((i+1));
         aptmt.setFloorLevel(i+2);
         aptList.add(aptmt);
    }
mapper.writeValueAsString(aptList)

언급URL : https://stackoverflow.com/questions/13514570/jackson-best-way-writes-a-java-list-to-a-json-array

반응형