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




5 Answers

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

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

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

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

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

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

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

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

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

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




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

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

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

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




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

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

ObjectMapper mapper = new ObjectMapper();

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



मेरे लिए निम्नलिखित काम करता है:

Map<String, String> propertyMap = getJsonAsMap(json);

जहां getJsonAsMap को इस प्रकार परिभाषित किया गया है:

public HashMap<String, String> getJsonAsMap(String json)
{
    try
    {
        ObjectMapper mapper = new ObjectMapper();
        TypeReference<Map<String,String>> typeRef = new TypeReference<Map<String,String>>() {};
        HashMap<String, String> result = mapper.readValue(json, typeRef);

        return result;
    }
    catch (Exception e)
    {
        throw new RuntimeException("Couldnt parse json:" + json, e);
    }
}

ध्यान दें कि यदि आपके जेसन में बाल ऑब्जेक्ट्स हैं (क्योंकि वे String नहीं हैं, तो वे एक और HashMap ), लेकिन यह काम करेगा यदि आपका जेसन इस तरह की गुणों की एक प्रमुख मूल्य सूची है:

{
    "client_id": "my super id",
    "exp": 1481918304,
    "iat": "1450382274",
    "url": "http://www.example.com"
}



इस समस्या का सामान्य समाधान यहां दिया गया है।

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

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




Related

java jackson

Tags

java   jackson