2013-09-26 13 views
5

के साथ JSON आउटपुट मैं ग्रोवी जेसनबिल्डर के साथ प्रयोग कर रहा हूं क्योंकि आप जेएसओएन ऑब्जेक्ट्स और एरे बनाने के विभिन्न तरीकों को देखने की कोशिश कर नीचे देख सकते हैं। चीजों को समझने के बाद, मैंने नीचे दिखाए गए अनुसार विस्तार करने की कोशिश की। मेरे पास सवाल है, जेसन सुंदर स्ट्रिंग आउटपुट में "सामग्री" क्यों दिखाई देती है? मेरे पास वास्तव में एक और जेसन ऑब्जेक्ट है जो json स्ट्रिंग आउटपुट में यह क्लास जानकारी प्रदर्शित करता है।ग्रोवी

कोई विचार? मैं इसके लिए नया हूं, इसलिए यह निश्चित रूप से एक स्पष्ट हो सकता है।

def tt = ["test", "test1"] 
       def jjj = "jason" 
       def js3 = new groovy.json.JsonBuilder() 
       def js2 = new groovy.json.JsonBuilder(tt); 
       js3 hello: "$jjj", "$jjj": tt 
       def js4 = new groovy.json.JsonBuilder() 
       def result = js4([sdn: js3, openflow: js2, type: 3]) 
       println js4.toPrettyString(); 


{ 
"sdn": { 
    "content": { 
     "hello": "jason", 
     "jason": [ 
      "test", 
      "test1" 
     ] 
    } 
}, 
"openflow": { 
    "content": [ 
     "test", 
     "test1" 
    ] 
}, 
"type": 3 

}

उत्तर

9

समस्या के रूप में फिर से बताने से किया जा सकता है ...

क्यों इस करता है:

import groovy.json.* 

def js3 = new JsonBuilder(["test", "test1"]) 
def js4 = new JsonBuilder(js3) 
println js4.toString() 

प्रिंट:

{"content":["test","test1"]} 

और इस:

import groovy.json.* 

def js3 = new JsonBuilder(["test", "test1"]) 
def js4 = new JsonBuilder(js3.content) 
println js4.toString() 

प्रिंट इस (?):

["test","test1"] 

संक्षिप्त उत्तर JsonBuilder एक सदस्य content नाम है, जो पेलोड का प्रतिनिधित्व करता है कि है। जब एक जेसनबिल्डर दूसरे को अवशोषित करता है, तो हम पेलोड को प्रतिस्थापित करना चाहते हैं, और इसे घोंसला नहीं करना चाहते हैं।

डीईएफ़ js4 = नए JsonBuilder (js3.content)

अंत में, इस तथ्य यह है कि JsonBuilder.toString() (code here) कॉल JsonOutput.toJson(object) (code here) की वजह से उपजी: यह पंक्ति रास्ता पेलोड को बदलने के लिए है।

class MyBuilder { 
    def content 
} 

def myB = new MyBuilder(content: ["test", "test1"]) 
println JsonOutput.toJson(myB) 
println JsonOutput.toJson(myB.content) 
+0

यह एक बहुत अच्छा व्याख्या दी गई है:

पाठक के लिए एक व्यायाम के साथ प्रयोग करने के लिए है। आप अब "कोड यहां" लिंक अपडेट करना चाह सकते हैं जो ग्रोवी स्रोत चले गए हैं। –

+1

उत्कृष्ट जवाब, एक टन मदद की, धन्यवाद –