2011-08-30 73 views
73

我有以下值String解析一個JSON字符串數組:如何使用傑克遜

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

及以下等級:

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

我想將它解析爲List<SomeClass>SomeClass[]

哪一種最簡單的方法使用JacksonObjectMapper

+0

我有類似的情況,但決定將它解序列化爲JSONArray對象,而不是將它轉換爲類,因爲它將避免將來出現類序列化問題。我有什麼好處嗎? – Arun

回答

118

我終於明白了:

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

獲取typeFactory爲'ObjectMapper objectMapper =新ObjectMapper();''objectMapper.getTypeFactory();' – manish

+1

是什麼ObjectMapper?你能指定一下嗎? – hitesh141

+0

@ hitesh141 ObjectMapper是com.fasterxml.jackson.databind.ObjectMapper的成員 – Chu

68

對方回答是正確的,但爲了完整性,這裏有其他的方法:

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

完整的例子使用數組。 替換 「constructArrayType()」,由 「constructCollectionType()」 或其它任何你需要的類型。

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); 
    } 
}