2011-08-30 17 views
73

Mam String z następujących wartości:Jak analizować ciąg JSON do tablicy za pomocą Jacksona

[{"key1":"value11", "key2":"value12"},{"key1":"value21", "key2":"value22"}] 

i następnego Klasa:

public class SomeClass { 
    private String key1; 
    private String key2; 
    /* ... getters and setters omitted ...*/ 
} 

I chcę analizować je do List<SomeClass> lub SomeClass[]

które jest najprostszym sposobem, aby to zrobić za pomocą JacksonObjectMapper?

+0

Miałem podobną sytuację, ale zdecydowałem się odseparować obiekt JSONArray zamiast zrobić to na zajęciach, ponieważ w przyszłości uniknie się problemów z serializacją klas. Czy jest jakaś przewaga nad szukaniem? – Arun

Odpowiedz

118

I wreszcie go:

ObjectMapper objectMapper = new ObjectMapper(); 
TypeFactory typeFactory = objectMapper.getTypeFactory(); 
List<SomeClass> someClassList = objectMapper.readValue(jsonString, typeFactory.constructCollectionType(List.class, SomeClass.class)); 
+30

Pobierz typeFactory jako 'ObjectMapper objectMapper = new ObjectMapper();' 'objectMapper.getTypeFactory();' – manish

+1

co to jest ObjectMapper? Czy możesz podać? – hitesh141

+0

@ hitesh141 ObjectMapper jest członkiem com.fasterxml.jackson.databind.ObjectMapper – Chu

68

Druga odpowiedź jest poprawna, ale pod względem kompletności, tutaj są inne sposoby:

List<SomeClass> list = mapper.readValue(jsonString, new TypeReference<List<SomeClass>>() { }); 
SomeClass[] array = mapper.readValue(jsonString, SomeClass[].class); 
3

Kompletny przykład z tablicy. Zamień "constructArrayType()" przez "constructCollectionType()" lub dowolny inny typ, którego potrzebujesz.

import java.io.IOException; 

import com.fasterxml.jackson.core.JsonParseException; 
import com.fasterxml.jackson.databind.ObjectMapper; 
import com.fasterxml.jackson.databind.type.TypeFactory; 

public class Sorting { 

    private String property; 

    private String direction; 

    public Sorting() { 

    } 

    public Sorting(String property, String direction) { 
     this.property = property; 
     this.direction = direction; 
    } 

    public String getProperty() { 
     return property; 
    } 

    public void setProperty(String property) { 
     this.property = property; 
    } 

    public String getDirection() { 
     return direction; 
    } 

    public void setDirection(String direction) { 
     this.direction = direction; 
    } 

    public static void main(String[] args) throws JsonParseException, IOException { 
     final String json = "[{\"property\":\"title1\", \"direction\":\"ASC\"}, {\"property\":\"title2\", \"direction\":\"DESC\"}]"; 
     ObjectMapper mapper = new ObjectMapper(); 
     Sorting[] sortings = mapper.readValue(json, TypeFactory.defaultInstance().constructArrayType(Sorting.class)); 
     System.out.println(sortings); 
    } 
} 
Powiązane problemy