2010-11-24 11 views
9

क्या रूबी में JSON को XML में कनवर्ट करने का कोई तरीका है?मैं जेएसओएन को रूबी में एक्सएमएल में कैसे परिवर्तित कर सकता हूं?

+0

मैं 'activesupport' टैग जोड़ा और एक प्रश्न में अपने शीर्षक बदल गया। –

उत्तर

10
require 'active_support' #for to_xml() 'gem install activesupport' use the 2.3 branch 
require 'json' #part of ruby 1.9 but otherwise 'gem install json' 

my_json = "{\"test\":\"b\"}" 
my_xml = JSON.parse(my_json).to_xml(:root => :my_root) 

इसके अलावा to_xml की जड़ तर्क ध्यान दें। यदि आप रूट निर्दिष्ट नहीं करते हैं तो यह उस शब्द के रूप में 'हैश' शब्द का उपयोग करेगा जो देखने के लिए बहुत अच्छा नहीं है।

का पठन स्तर के लिए अलग मॉड्यूल में ActiveSupport moved its components:

+0

क्या मुझे 'active_support' के लिए कुछ मणि चाहिए? जब मुझे इसकी आवश्यकता होती है तो मुझे एक त्रुटि मिल रही है। –

+0

हां। सक्रिय समर्थन रेल पर रूबी का हिस्सा है। आपको इसे 'मणि इंस्टॉल एक्टिव्सपोर्ट' – rwilliams

+0

के साथ इंस्टॉल करने में सक्षम होना चाहिए, जब भी मैं इसे चलाने का प्रयास करता हूं, मुझे निम्न त्रुटि मिलती है: # (NoMethodError) के लिए 'अपरिभाषित विधि' to_xml '। 'JSON.parse' को हैश लौटाया जाना चाहिए, है ना? –

-1

मुझे ऐसा करने के लिए एक जादू रत्न नहीं पता है, लेकिन आप आसानी से क्या कर सकते हैं हैश और हैश से जेसन।

require 'active_support' 
my_hash = Hash.from_xml(my_xml) 

तो

require 'json' 
my_json = my_hash.to_json 
+3

मैं जेएसओएन को एक्सएमएल में बदलने की कोशिश कर रहा हूं, एक्सएमएल नहीं JSON –

+0

क्या वे अजीब उद्धरण काम करने जा रहे हैं, वैसे भी? यह बहुत स्वस्थ नहीं दिखता है। – jwueller

+0

@elusive: हाँ, वे भी मेरे लिए मज़ाकिया लग रहे हैं। मुझे लगता है कि वे स्मार्ट उद्धरण हैं। –

6
उर्फ ​​आर-डब जवाब @rwilliams के बारे में

। सब कुछ एक बार में लोड करने के बजाय, हम इसे केवल कुछ सबसेट लोड करने के लिए कह सकते हैं, या, अगर हम अभी भी चुनते हैं, तो हम सब कुछ एक साथ लोड कर सकते हैं। कोई फर्क नहीं पड़ता कि हम require 'activesupport' का उपयोग नहीं कर सकते जैसे कि हम करते थे, इसके बजाय हमें require 'activesupport/all' या सबसेट्स का उपयोग करना होगा।

>> require 'active_support/all' #=> true 
>> json = {'foo'=>'bar'}.to_json #=> "{"foo":"bar"}" 
>> ActiveSupport::JSON.decode(json).to_xml #=> "<?xml version="1.0" encoding="UTF-8"?>\n<hash>\n <foo>bar</foo>\n</hash>\n" 

XML और JSON रूपांतरण में पहली पंक्ति भार:

>> require 'active_support/core_ext/array/conversions' #=> true 
>> [{:a => 1, :b => 2}, {:c => 3}].to_xml 
=> "<?xml version="1.0" encoding="UTF-8"?>\n<objects type="array">\n <objects a="1" b="2" type="hash"/>\n <objects c="3" type="hash"/>\n</objects>\n" 

इसके अलावा, ActiveSupport ताकि आप एआर के साथ पूरे रूपांतरण कर सकते हैं, JSON समर्थन शामिल है। दूसरी पंक्ति परीक्षण के लिए उपयोग करने के लिए एक JSON नमूना सेट अप करती है। तीसरी पंक्ति ने जेएसओएन का पर्दाफाश किया, इसे डीकोड किया, फिर इसे एक्सएमएल में बदल दिया।

1

अन्य उत्तरों सरल रिकर्सिव रूपांतरणों की अनुमति नहीं देते हैं। जैसा कि this answer on Code Review में बताया गया है, आपको सरल प्रारूप बनाने के लिए कस्टम हेल्पर की आवश्यकता होगी।

यह इस बदल जाएगी ...

data = [ 
    { 'name' => 'category1', 
    'subCategory' => [ 
     { 'name' => 'subCategory1', 
     'product' => [ 
      { 'name' => 'productName1', 
      'desc' => 'desc1' }, 
      { 'name' => 'productName2', 
      'desc' => 'desc2' } ] 
     } ] 
    }, 
    { 'name' => 'category2', 
    'subCategory' => [ 
     { 'name' => 'subCategory2.1', 
     'product' => [ 
      { 'name' => 'productName2.1.1', 
      'desc' => 'desc1' }, 
      { 'name' => 'productName2.1.2', 
      'desc' => 'desc2' } ] 
     } ] 
    }, 
] 

... इस में:

<?xml version="1.0"?> 
<root> 
    <category> 
    <name>category1</name> 
    <subCategory> 
     <name>subCategory1</name> 
     <product> 
     <name>productName1</name> 
     <desc>desc1</desc> 
     </product> 
     <product> 
     <name>productName2</name> 
     <desc>desc2</desc> 
     </product> 
    </subCategory> 
    </category> 
    <category> 
    <name>category2</name> 
    <subCategory> 
     <name>subCategory2.1</name> 
     <product> 
     <name>productName2.1.1</name> 
     <desc>desc1</desc> 
     </product> 
     <product> 
     <name>productName2.1.2</name> 
     <desc>desc2</desc> 
     </product> 
    </subCategory> 
    </category> 
</root> 
संबंधित मुद्दे

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