Jackson-best way écrit une liste java sur un tableau json

je veux utiliser jackson pour convertir un ArrayList en JsonArray.

Événement.java: c'est la classe Java bean avec deux champs "field1", "field2" cartographiés comme JsonProperty.

Mon but est:

Conversion

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"}
]

de La façon que je peux penser à est de: writeListToJsonArray ():

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

je suis à la recherche de quelque chose de la forme:

generator.write(out, list)  

cela convertit directement list au format JSON array et ensuite l'écrire à outputstream "out".

encore plus gourmand:

generator.write(out, list1)

generator.write(out, list2)

convertir/ajouter dans la liste 1, liste 2 en un seul tableau json. alors écrire""

42
demandé sur Shengjie 2012-11-22 18:15:10

3 réponses

c'est trop compliqué, Jackson gère les listes via ses méthodes d'écriture aussi bien qu'il gère les objets réguliers. Cela devrait très bien fonctionner pour vous, en supposant que je n'ai pas mal compris votre question:

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));
}
44
répondu Perception 2017-12-03 20:52:44

je ne trouve pas StringWriter, s'il vous plaît essayer:

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

Ou tout simplement utiliser ObjectMapper#writeValueAsString:

    final ObjectMapper mapper = new ObjectMapper();
    System.out.println(mapper.writeValueAsString(list));
18
répondu Jaskey 2015-05-11 10:05:19

dans objectMapper nous avons writeValueAsString () qui accepte l'objet comme paramètre. Nous pouvons passer la liste des objets comme paramètre récupérer la chaîne.

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)
9
répondu user3804309 2015-09-04 16:55:19