Sonntag, Juli 5, 2020

Serialisierung von Arrays mit Jackson

Ich bin serialisieren Folgendes Modell:

class Foo {

    private List<String> fooElements;
}

Wenn fooElements enthält die Zeichenfolgen ‚eins‘, ‚zwei‘ und ‚drei. Das JSON enthält eine Zeichenfolge:

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

Wie ich es bekommen kann dann wie folgt Aussehen:

{
    "fooElements":[
         "one", "two", "three"
     ]
}
  • Könntest du ein Beispiel zeigen, wie Sie es tun? Es ist wirklich seltsam.
InformationsquelleAutor user86834 | 2013-09-04

2 Kommentare

  1. 9

    Ich habe es funktioniert durch hinzufügen einer benutzerdefinierten Serialisierung:

    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();
        }
    }
    • Zwei Variablen namens „fooValue“ im gleichen Satz?!
  2. 8

    Wenn Sie mit Jackson, dann das folgende einfache Beispiel für mich gearbeitet.

    Definieren Sie die Klasse „Foo“:

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

    Dann mit einem standalone-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));
    
        }
    
    }

    Ausgabe:

    {„fooElements“:[„eins“,“zwei“,“drei“]}

Kostenlose Online-Tests