2013-01-10 41 views
16

मैं एक फ़ाइल में एक groovy नक्शा जारी रखने की कोशिश कर रहा हूँ। मेरा वर्तमान प्रयास स्ट्रिंग प्रस्तुति को लिखना है और उसके बाद इसे फिर से पढ़ने के लिए तैयार होने पर मानचित्र को फिर से बनाने के लिए evaluate पर कॉल करें और उसे कॉल करें।उद्धरण के साथ स्ट्रिंग करने के लिए groovy नक्शा Serializing

मेरी समस्या यह है कि toString() मानचित्र की विधि तत्वों के मूल्यों से महत्वपूर्ण उद्धरण हटा देती है। जब मेरा कोड मूल्यांकन करता है, तो यह अज्ञात पहचानकर्ता के बारे में शिकायत करता है। लेकिन मूल्य के आसपास उद्धरण कुंजी b के लिए चले गए हैं -

m = [a: 123, b: 'test'] 
print "orig: $m\n" 

s = m.toString() 
print " str: $s\n" 

m2 = evaluate(s) 
print " new: ${m2}\n" 

पहले दो प्रिंट बयान लगभग काम:

इस कोड को समस्या को दर्शाता है। [a: 123, b: 'test'] दिखाने के बजाय, यह [a: 123, b: test] दिखाता है।

इस बिंदु पर नुकसान हो गया है। evaluate कॉल चोक करता है जब यह पहचानकर्ता के रूप में test का मूल्यांकन करने की कोशिश करता है और स्ट्रिंग नहीं।

तो, मेरे विशिष्ट प्रश्न:

  1. वहाँ क्रमानुसार करने/ग्रूवी में de-क्रमानुसार नक्शे एक बेहतर तरीका है?
  2. क्या उचित उद्धरण वाले मानचित्र के स्ट्रिंग प्रस्तुति का उत्पादन करने का कोई तरीका है?

    // serialize 
    def m = [a: 123, b: 'test'] 
    def str = m.inspect() 
    
    // deserialize 
    m = Eval.me(str) 
    

    एक और तरीका है एक ग्रूवी नक्शा क्रमानुसार करने के रूप में एक पठनीय स्ट्रिंग JSON के साथ है:

उत्तर

43

ग्रूवी inspect() विधि एक parseable स्ट्रिंग के रूप में एक वस्तु देता है प्रदान करता है

// serialize 
import groovy.json.JsonBuilder 
def m = [a: 123, b: 'test'] 
def builder = new JsonBuilder() 
builder(m) 
println builder.toString() 

// deserialize 
import groovy.json.JsonSlurper 
def slurper = new JsonSlurper() 
m = slurper.parseText('{"a": 123, "b": "test"}') 
+3

लोगों को काटने और पेस्ट करने के लिए डीफ़ जोड़ें;) – orbfish

2

आप कर सकते हैं myMap.toMapString()

+0

'myMap.toMapStri एनजी() 'उद्धरण भी छोड़ देगा ... – s0undt3ch