2015-03-30 9 views
20

का उपयोग कर मानचित्र को JSON में कनवर्ट करें मैक्सिकन का उपयोग करके मैप को एक वैध JSON में कैसे परिवर्तित कर सकता हूं?जैक्सन

मैं एक स्प्रिंग बूट बाकी पोस्ट विधि के माध्यम से गूगल के GSON का उपयोग कर इसे कर रहा हूँ ...

यहाँ RESTful वेब सेवा है:

import java.util.Map; 

import org.springframework.web.bind.annotation.RequestBody; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RestController; 

import com.fasterxml.jackson.core.JsonFactory; 
import com.fasterxml.jackson.core.JsonParser; 
import com.google.gson.Gson; 

@RestController 
@RequestMapping("/myservice") 
public class ValidationService {  

    @RequestMapping(value="/validate", method = RequestMethod.POST) 
    public void validate(@RequestBody Map<String, Object> payload) throws Exception { 
     Gson gson = new Gson(); 
     String json = gson.toJson(payload); 
     System.out.println(json); 
    } 
} 

तो, जब मैं आह्वान यह इस का उपयोग करते हुए:

curl -H "Accept: application/json" -H "Content-type: application/json" \ 
-X POST -d '{"name":"value"}' http://localhost:8080/myservice/validate 

stdout में निम्नलिखित प्राप्त करें (यह है मैं वास्तव में क्या चाहते हैं):

{"name":"value"} 

क्या Google के जीसन के बजाए जैक्सन का उपयोग करके ऐसा करने का कोई बेहतर तरीका है और/या क्या मैं इसके बारे में गलत तरीके से जा रहा हूं?

+0

[जैक्सन बनाम के संभावित डुप्लिकेट जीसन] (http://stackoverflow.com/questions/2378402/jackson-vs-gson) –

+3

नीरज जैन, टिप्पणी के लिए धन्यवाद लेकिन जैक्सन बनाम जीसन जैक्सन बनाम जीसन के सकारात्मक और नकारात्मक के बारे में है। यह पोस्ट एक विशिष्ट सवाल है। –

उत्तर

48

आप जैक्सन का उपयोग कर के रूप में इस JSON को Map परिवर्तित कर सकते हैं:: यहाँ उसी के लिए कड़ी है

Map<String,String> payload = new HashMap<>(); 
payload.put("key1","value1"); 
payload.put("key2","value2"); 

String json = new ObjectMapper().writeValueAsString(payload); 
System.out.println(json); 
+0

यह स्ट्रिंग का नक्शा है, जेएसओएन नहीं। आउटपुट स्ट्रिंग को जेएसओएन प्रकार में परिवर्तित करने के लिए एक और कदम होगा। –

+0

@NayanWadekar यह वास्तव में काम करता है, मुझे लगता है कि आप गलत हैं या शायद आप कुछ अंतर्दृष्टि प्रदान करना चाहते हैं? –

+0

@ ब्रुनो बॉसोला क्षमा करें, मैं वास्तविक JSON ऑब्जेक्ट के बारे में सोच रहा था, जेएसओएन स्ट्रिंग प्रस्तुति के लिए आवश्यक आउटपुट नहीं देखा था, यह सही है। –

0

आप जैक्सन का उपयोग कर रहे हैं, तो बेहतर ObjectNode के लिए सीधे परिवर्तित करने के लिए।

//not including SerializationFeatures for brevity 
static final ObjectMapper mapper = new ObjectMapper(); 

//pass it your payload 
public static ObjectNode convObjToONode(Object o) { 
    StringWriter stringify = new StringWriter(); 
    ObjectNode objToONode = null; 

    try { 
     mapper.writeValue(stringify, o); 
     objToONode = (ObjectNode) mapper.readTree(stringify.toString()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    System.out.println(objToONode); 
    return objToONode; 
} 
1

जैक्सन का उपयोग करना, आप इसे इस रूप में कर सकते हैं:

ObjectMapper mapper = new ObjectMapper(); 
    String clientFilterJson = ""; 
    try { 
     clientFilterJson = mapper.writeValueAsString(filterSaveModel); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    }