2011-08-30 74 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); 
    } 
}