2009-12-10 17 views
18

ग्रूवी को मैं JSON के लिए ग्रूवी परिवर्तित करने के बारे में बहुत सी बातें पाया है, लेकिन अजीब तरह से पर्याप्त है, न कि अन्य तरीके से।JSON पार्सर

(सर्वोत्तम) वहाँ के आसपास ग्रूवी पार्सर को JSON क्या है?

उत्तर

12

क्योंकि संकलित ग्रूवी वर्गों जावा वर्गों के साथ संगत कर रहे हैं, तो आप POJOs (या pogos) को JSON परिवर्तित करने के लिए किसी भी जावा पुस्तकालय का उपयोग करने में सक्षम होना चाहिए।

String json = '{ 
    "name" : { "first" : "Joe", "last" : "Sixpack" }, 
    "gender" : "MALE", 
    "verified" : false, 
    "userImage" : "Rm9vYmFyIQ==" 
}' 
एक मानचित्र के

का उपयोग कर: Jackson जो आप इस तरह JSON कन्वर्ट करने के लिए उपयोग कर सकते हैं एक बहुत ही लोकप्रिय पसंद है

Map<String,Object> userData = mapper.readValue(json, Map.class) 

या यदि आप एक ग्रूवी उपयोगकर्ता वर्ग के लिए JSON कनवर्ट करना चाहते हैं:

User userData = mapper.readValue(json, User.class) 

यह जेएसओएन में ग्रूवी क्लास में चाबियों को मैप करेगा।

6

JSON-lib दावों JSON और वापस करने के लिए पोगो को बदलने के लिए सक्षम होने के लिए। यदि पीओजीओ का अर्थ है जो मुझे लगता है कि यह करता है (सादा पुराना ग्रोवी ऑब्जेक्ट), तो आप सेट हैं :)।

def strAsJsonObject = "{integer:1, bool: true}" as JSONObject 

अद्यतन:

वे इस उदाहरण दे

import net.sf.*; 
import net.sf.json.*; 
import net.sf.json.groovy.*; 

println "hi" 
GJson.enhanceClasses() 
def strAsJsonObject = "{integer:1, bool: true}" as JSONObject 
println strAsJsonObject 

यह आप का पीछा करेंगे:

मैं अपने आप को लिब की कोशिश की है, यह पूरा कोड है निर्भरता डाउनलोड करने के मैराथन के माध्यम से (ezmorph, commons lang, commons logger) और एक बार जब आप उन्हें हल कर लेंगे, तो यह आपको मिलता है:

सूत्र में अपवाद "मुख्य" org.codehaus.groovy.runtime.typehandling.GroovyCastException: वस्तु नहीं दिया जा सकता '{पूर्णांक: 1, bool: सच}' वर्ग के साथ 'java.lang.String' वर्ग के लिए 'net.sf.json.JSONObject'

The mailing list के अनुसार, आपको बुला रहा GJsonlib.enhanceClasses() नहीं करने के लिए इस मिलता है, लेकिन मैं फोन था कि, जैसा कि आप ऊपर देख सकते हैं।

मैंने निष्कर्ष निकाला गया है कि यह एक सार्थक प्रयास है ग्रूवी के JSON-लिब नफरत करने के लिए।

+0

इससे कास्ट त्रुटि उत्पन्न होती है। मैं समझ गया कि 'JSONObject' वाक्यविन्यास के रूप में' obj वास्तव में एक Groovy ऑब्जेक्ट JSON में परिवर्तित करता है। – Gzorg

+0

मैंने इसे दस्तावेज़ पर देखा, इसलिए इसे इरादे के रूप में काम करना चाहिए, लेकिन यह मेरे लिए काम नहीं करता है। – Gzorg

+0

क्या आपने GJson.enhanceClasses() चलाया है? – nes1983

4

मैं HTTPBuilder में JSON-लिब उपयोग करते हैं, लेकिन मैं JSONSlurper क्लास का उपयोग एक JSON उदाहरण के लिए एक स्ट्रिंग पार्स करने के लिए:

JSON jsonMapObject = new JsonSlurper().parse("{integer:1, bool: true}"); 

JSON करने के लिए वस्तु से जाने के लिए, मैं यह कर:

//from a map: 
new JSONObject().putAll([one:'1', two:'two']).toString() 
//from an object: 
JSONObject.fromObject(somePOGO).toString() 
+0

इस समय, आपको "नया जेसनस्लपर()। ParseText" का उपयोग करने के बजाय "नया जेसनस्लपर()। पार्स" – sourcerebels

3

जेसन-लिब और जीजेसन.हेनेंस क्लास() के साथ परेशानी वाले लोगों के लिए। इसके बजाय GJson.enhanceString() आज़माएं।

GJson.enhanceString() 
def o = "{\"x\": 20.0}" as JSONObject 
+0

GJson.enhanceString() – squiddle

33

यदि आप ग्रोवी 1 पर हैं।8 या बाद में, जेसनस्लपर में एक निर्माण है जिसका आप इस प्रकार उपयोग कर सकते हैं:

import groovy.json.JsonSlurper 

//Attention: you have to use double quotes inside the json string 
def jsonObj = new JsonSlurper().parseText('{ "name":"Peter", "age": 23}') 

assert jsonObj.name == "Peter" 
assert jsonObj.age == 23 
//this won't work, because it's not defined 
assert jsonObj.gender == null 
+1

मदद करता है JSONSlurper वास्तव में उदार उपयोग के कारण कुछ JSON दस्तावेज़ों पर स्टैक ओवरव्लो अपवाद का कारण बनता है जावा regexp कार्यान्वयन में regexps और caveats। Http://jira.codehaus.org/browse/GROOVY-4903 देखें (निश्चित के रूप में चिह्नित है लेकिन समस्या अभी भी मौजूद है) –

+3

जेसनस्लपर भी जेएसओएन की तिथियों को निराशाजनक नहीं करता है, जो वास्तव में परेशान है। – erturne

+1

@erturne जो कि JSON मानक का हिस्सा नहीं होने के साथ कुछ करने के लिए हो सकता है। यदि आपके पास जेएसओएन की नई तारीख() 'या अन्य गैर-स्टैंडेंड सिंटैक्स है, तो आपको जेसनस्लपर को उप-वर्गीकृत करने की आवश्यकता होगी, अन्यथा आप फिर से चालू हो सकते हैं और लौटाए गए मानचित्र को ठीक कर सकते हैं। – Tobia

संबंधित मुद्दे