2013-09-04 10 views
8

Ich Serialisierung das folgende Modell:Serialisierung Array mit Jackson

class Foo { 

    private List<String> fooElements; 
} 

Wenn fooElements die Saiten ‚Eins‘ enthält, ‚zwei‘ und ‚drei. Die JSON enthält eine Zeichenfolge:

{ 
    "fooElements":[ 
     "one, two, three" 
    ] 
} 

Wie kann ich es wie folgt aussehen:

{ 
    "fooElements":[ 
     "one", "two", "three" 
    ] 
} 
+0

Können Sie ein Beispiel zeigen, wie Sie es tun? Es ist wirklich komisch. –

Antwort

8

Ich habe es funktioniert durch Hinzufügen eines benutzerdefinierten Serialisierer:

class Foo { 
    @JsonSerialize(using = MySerializer.class) 
    private List<String> fooElements; 
} 

public class MySerializer extends JsonSerializer<Object> { 

    @Override 
    public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) 
      throws IOException, JsonProcessingException { 
     List<String> fooList = (List<String>) value; 

     if (fooList.isEmpty()) { 
      return; 
     } 

     String fooValue = fooList.get(0); 
     String[] fooElements = fooValue.split(","); 

     jgen.writeStartArray(); 
     for (String fooValue : fooElements) { 
      jgen.writeString(fooValue); 
     } 
     jgen.writeEndArray(); 
    } 
} 
7

Wenn Sie Jackson verwenden, dann wird die folgende einfache Beispiel für mich gearbeitet.

Definieren Sie die Foo Klasse:

public class Foo { 
    private List<String> fooElements = Arrays.asList("one", "two", "three"); 

    public Foo() { 
    } 

    public List<String> getFooElements() { 
     return fooElements; 
    } 
} 

Dann eine eigenständige Java-App:

import java.io.IOException; 

import org.codehaus.jackson.JsonGenerationException; 
import org.codehaus.jackson.map.JsonMappingException; 
import org.codehaus.jackson.map.ObjectMapper; 

public class JsonExample { 

    public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException { 

     Foo foo = new Foo(); 

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

    } 

} 

Ausgang:

{ "fooElements": [ "eins", "zwei "," drei "]}

Verwandte Themen