Jackson – la meilleure façon d’écrire une liste Java dans un tableau json

Je veux utiliser jackson pour convertir une ArrayList en JsonArray.

Event.java : il s’agit de la classe du bean java avec deux champs “field1”, “field2” mappé en JsonProperty.

Mon but est:

Convertir

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

À

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

La façon dont je peux penser est la suivante: writeListToJsonArray () :

 public void writeListToJsonArray() throws IOException { ArrayList list = new ArrayList(); 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) { Ssortingng e = mapper.writeValueAsSsortingng(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.toSsortingng()); } 

Je cherche quelque chose comme:

 generator.write(out, list) 

Cela convertit directement la liste au format tableau json, puis l’écrit dans le stream de sortie “out”.

encore plus gourmand:

 generator.write(out, list1) generator.write(out, list2) 

Cela va simplement convertir / append dans la liste1, liste2 en un seul tableau json. puis écrivez-le à “out”

Ceci est trop compliqué, Jackson gère aussi bien les listes via ses méthodes d’écriture que les objects ordinaires. Cela devrait bien fonctionner pour vous, en supposant que je n’ai pas mal compris votre question:

 public void writeListToJsonArray() throws IOException { final List list = new ArrayList(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 Ssortingng(data)); } 

Je ne trouve pas toByteArray() comme l’a dit @asortingoom, donc j’utilise SsortingngWriter , veuillez essayer:

 public void writeListToJsonArray() throws IOException { //your list final List list = new ArrayList(2); list.add(new Event("a1","a2")); list.add(new Event("b1","b2")); final SsortingngWriter sw =new SsortingngWriter(); final ObjectMapper mapper = new ObjectMapper(); mapper.writeValue(sw, list); System.out.println(sw.toSsortingng());//use toSsortingng() to convert to JSON sw.close(); } 

Ou utilisez simplement ObjectMapper#writeValueAsSsortingng :

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

Dans objectMapper, nous avons writeValueAsSsortingng () qui accepte l’object comme paramètre. Nous pouvons passer la liste des objects en paramètre récupérer la chaîne.

 List aptList = new ArrayList(); 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)