java - जैक्सन JSON के साथ एक JSON स्ट्रिंग को मानचित्र<स्ट्रिंग, स्ट्रिंग> में कैसे परिवर्तित करें




jackson (7)

मैं ऐसा कुछ करने की कोशिश कर रहा हूं लेकिन यह काम नहीं करता है:

Map<String, String> propertyMap = new HashMap<String, String>();

propertyMap = JacksonUtils.fromJSON(properties, Map.class);

लेकिन आईडीई कहते हैं:

अनचेक असाइनमेंट Map to Map<String,String>

ऐसा करने का सही तरीका क्या है? मैं केवल जैक्सन का उपयोग कर रहा हूं क्योंकि यह प्रोजेक्ट में पहले से ही उपलब्ध है, क्या JSON में / से कनवर्ट करने का मूल जावा तरीका है?

PHP में मैं बस json_decode($str) और मैं एक सरणी वापस प्राप्त करूंगा। मुझे मूल रूप से वही चीज़ चाहिए।


Google के जीसन का उपयोग करना

here बताए गए Google के जीसन का उपयोग क्यों नहीं here ?

बहुत सीधे आगे और मेरे लिए नौकरी की:

HashMap<String,String> map = new Gson().fromJson( yourJsonString, new TypeToken<HashMap<String, String>>(){}.getType());

आपको प्राप्त चेतावनी संकलक द्वारा की जाती है, लाइब्रेरी (या उपयोगिता विधि) द्वारा नहीं।

सीधे जैक्सन का उपयोग करने का सबसे आसान तरीका होगा:

HashMap<String,Object> props;

// src is a File, InputStream, String or such
props = new ObjectMapper().readValue(src, new TypeReference<HashMap<String,Object>>() {});
// or:
props = (HashMap<String,Object>) new ObjectMapper().readValue(src, HashMap.class);
// or even just:
@SuppressWarnings("unchecked") // suppresses typed/untype mismatch warnings, which is harmless
props = new ObjectMapper().readValue(src, HashMap.class);

उपयोगिता विधि जिसे आप शायद कॉल करते हैं, बस इसी तरह कुछ करता है।


ऑब्जेक्ट मैपर का उपयोग करके इस समस्या का सामान्य समाधान यहां दिया गया है।

public static <K extends Object, V extends Object> Map<K, V> getJsonAsMap(String json, K key, V value) {
    try {
      ObjectMapper mapper = new ObjectMapper();
      TypeReference<Map<K, V>> typeRef = new TypeReference<Map<K, V>>() {
      };
      return mapper.readValue(json, typeRef);
    } catch (Exception e) {
      throw new RuntimeException("Couldnt parse json:" + json, e);
    }
  }

उम्मीद है कि किसी दिन किसी भी कुंजी / मूल्य प्रकार के मानचित्र में कनवर्ट करने के लिए उपयोग विधि बनाने के लिए सोचा जाएगा इसलिए यह जवाब :)


मुझे निम्न कोड मिला है:

public void testJackson() throws IOException {  
    ObjectMapper mapper = new ObjectMapper(); 
    File from = new File("albumnList.txt"); 
    TypeReference<HashMap<String,Object>> typeRef 
            = new TypeReference<HashMap<String,Object>>() {};

    HashMap<String,Object> o = mapper.readValue(from, typeRef); 
    System.out.println("Got " + o); 
}   

यह एक फ़ाइल से पढ़ रहा है, लेकिन mapper.readValue() एक mapper.readValue() भी स्वीकार करेगा और आप निम्न का उपयोग करके एक स्ट्रिंग से mapper.readValue() प्राप्त कर सकते हैं:

new ByteArrayInputStream(astring.getBytes("UTF-8")); 

मेरे ब्लॉग पर मैपर के बारे में थोड़ा और स्पष्टीकरण है।


स्ट्रिंग से JSON में कनवर्ट करना मानचित्र:

Map<String,String> map = new HashMap<String,String>();

ObjectMapper mapper = new ObjectMapper();

map = mapper.readValue(string, HashMap.class);

TypeFactory आज़माएं। जैक्सन जेएसओएन (2.8.4) के लिए कोड यहां दिया गया है।

Map<String, String> result;
ObjectMapper mapper;
TypeFactory factory;
MapType type;

factory = TypeFactory.defaultInstance();
type    = factory.constructMapType(HashMap.class, String.class, String.class);
mapper  = new ObjectMapper();
result  = mapper.readValue(data, type);

जैक्सन JSON के पुराने संस्करण के लिए कोड यहां दिया गया है।

Map<String, String> result = new ObjectMapper().readValue(
    data, TypeFactory.mapType(HashMap.class, String.class, String.class));

ObjectReader reader = new ObjectMapper().readerFor(Map.class);

Map<String, String> map = reader.readValue("{\"foo\":\"val\"}");

ध्यान दें कि reader उदाहरण थ्रेड सुरक्षित है।






jackson