2011-08-30 21 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 का उपयोग करके इसे करने का सबसे आसान तरीका कौन सा है?

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

मैं एक ऐसी ही स्थिति थी, लेकिन एक वर्ग के लिए यह कर के बजाय JSONArray वस्तु को डी-serialise करने के लिए है, क्योंकि यह भविष्य में वर्ग क्रमबद्धता मुद्दों से बचने होगा फैसला किया। क्या कोई फायदा देखने पर है? – Arun

उत्तर

118

मैं अंत में यह मिल गया। "निर्माणअरे टाइप टाइप करें()" निर्माण कोलेक्शन टाइप() "या किसी अन्य प्रकार की आपको आवश्यकता है।

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

टाइपफैक्टरी को 'ऑब्जेक्टमैपर ऑब्जेक्टमैपर = नया ऑब्जेक्टमैपर(); '' objectMapper.getTypeFactory(); ' – manish

+1

ऑब्जेक्टमैपर क्या है? क्या आप कृपया निर्दिष्ट कर सकते हैं? – hitesh141

+0

@ hitesh141 ऑब्जेक्टमैपर 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

एक सरणी के साथ पूरा उदाहरण