2011-08-30 37 views
73

Tôi có một String với giá trị sau:Làm thế nào để phân tích một chuỗi JSON để một mảng sử dụng Jackson

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

Và các lớp sau:

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

Và tôi muốn phân tích nó để một List<SomeClass> hoặc SomeClass[]

Cách đơn giản nhất để thực hiện việc đó bằng cách sử dụng JacksonObjectMapper là gì?

+0

Tôi đã có một tình huống tương tự, nhưng đã quyết định hủy nối tiếp đối tượng JSONArray thay vì thực hiện nó cho một lớp, vì nó sẽ tránh các vấn đề sắp xếp lớp trong tương lai. Có lợi thế nào không? – Arun

Trả lời

118

Cuối cùng tôi đã nhận nó:

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

Lấy typeFactory là đối tượng 'ObjectMapperMapper = new ObjectMapper();' 'objectMapper.getTypeFactory();' – manish

+1

ObjectMapper là gì? Bạn có thể vui lòng chỉ định? – hitesh141

+0

@ hitesh141 ObjectMapper là thành viên của com.fasterxml.jackson.databind.ObjectMapper – Chu

68

Câu trả lời khác là đúng, nhưng cho đầy đủ, đây là một cách khác:

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

Các ví dụ hoàn chỉnh với một mảng. Thay thế "constructArrayType()" theo "constructCollectionType()" hoặc bất kỳ loại nào khác bạn cần.

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); 
    } 
} 
Các vấn đề liên quan