2017-03-17 1 views
1

Ich benutze Jackson für JSON-Serialisierung. Ich versuche, eine Java-Liste (die Zeichenfolgenwerte enthält) in ein JSON-Array zu konvertieren. Ich habe versucht, die folgenden Ansätze (Themen unten für jede gegebene)schreibe Java-Liste in JSON-Array über Jackson

1. Schreibfeldelemente JsonGenerator der write

final JsonGenerator generator = factory.createGenerator(output, JsonEncoding.UTF8); 
    generator.writeStartArray(); 
     for (String arg: argsList) { 
      generator.writeStartObject(); 
      log.info("arg value is {}", arg); 
      generator.writeString(arg); 
      generator.writeEndObject(); 
     } 
     generator.writeEndArray(); 

Exception

Can not write a string, expecting field name (context: Object) 

ich die Ausnahme erhalten von „Generator .writeString (arg) ". Ich kann WriteStringField nicht verwenden.

Objekt Mapper

ObjectMapper mapper = new ObjectMapper(); 
mapper.writeValue(out, argsList); 
      final byte[] argsBytes = out.toByteArray(); 
      generator.writeFieldName("args"); 
      generator.writeObjectField("args", argsBytes) 

Dies erzeugt das Array als String und kein Array im JSON-Objekt (das ist, was ich zu erreichen versuche). Irgendwelche Vorschläge wären willkommen.

End-Zustand (versuchen zu erreichen):

{ 
"args":["abc","def","ghi","jkl","mno"] 
} 
+0

So wollen Sie ein JSON-Objekt mit einem einzigen Schlüssel mit dem Namen args, Ihre Liste enthält? Ist das richtig? Warum erstellen Sie keine Klasse mit einem einzigen Feld namens args, die Ihre Liste enthält, und eine Instanz dieser Klasse serialisieren? –

+0

werde versuchen, dass - ich hatte gehofft, ich könnte das gleiche durch den Generator erreichen. –

+0

Sie können jeden gültigen Json durch den Generator erreichen. Wenn Sie einen Serializer versuchen (was ein guter Vorschlag ist), beenden Sie bitte diese Frage, damit wir nicht einfach eine andere Frage/Antwort "Tun Sie das nicht, verwenden Sie einen Serialisierer" haben. – weston

Antwort

1

Durch das Starten/Beenden eines Objekts um jeden Array-Eintrag, was Sie tun versucht, ungültig json zu machen:

{ 
    "args":[{"abc"},{"def"},{"ghi"},{"jkl"},{"mno"}] 
} 

und der Generator hält dich recht davon ab, dies zu tun.

Schreiben Sie einfach die Saiten direkt in das Array:

final JsonGenerator generator = factory.createGenerator(output, JsonEncoding.UTF8); 
generator.writeStartArray(); 
for (String arg: argsList) { 
    generator.writeString(arg); 
} 
generator.writeEndArray();