कैसे एक रूबी हैश वस्तु को JSON में परिवर्तित करें?


340

कैसे एक रूबी हैश वस्तु को JSON में परिवर्तित करें? तो मैं नीचे इस उदाहरण की कोशिश कर रहा हूं और यह काम नहीं करता है?

मैं RubyDoc को देख रहा था और स्पष्ट रूप से Hashऑब्जेक्ट में कोई to_jsonविधि नहीं है । लेकिन मैं उन ब्लॉगों पर पढ़ रहा हूं जो रेल का समर्थन करता है active_record.to_jsonऔर समर्थन भी करता है hash#to_json। मैं समझ सकता हूं ActiveRecordकि एक रेल वस्तु है, लेकिन Hashरेल के मूल निवासी नहीं है, यह एक शुद्ध रूबी वस्तु है। तो पटरियों में आप एक कर सकते हैं hash.to_json, लेकिन शुद्ध रूबी में नहीं?

car = {:make => "bmw", :year => "2003"}
car.to_json

जवाबों:


563

रूबी के कई बारीकियों में से एक मौजूदा वर्गों को अपने तरीकों से विस्तारित करने की संभावना है। इसे "क्लास रीओपनिंग" या बंदर-पैचिंग कहा जाता है (बाद का अर्थ अलग-अलग हो सकता है , हालांकि)।

तो, यहाँ एक नज़र रखना:

car = {:make => "bmw", :year => "2003"}
# => {:make=>"bmw", :year=>"2003"}
car.to_json
# NoMethodError: undefined method `to_json' for {:make=>"bmw", :year=>"2003"}:Hash
#   from (irb):11
#   from /usr/bin/irb:12:in `<main>'
require 'json'
# => true
car.to_json
# => "{"make":"bmw","year":"2003"}"

जैसा कि आप देख सकते हैं, हमारे लिए jsonजादुई रूप से विधि की आवश्यकता है ।to_jsonHash


2
सभी मैं कह सकता हूँ वाह :) बहुत बहुत धन्यवाद !! तो मूल रूप से मैं गतिशील रूप से json वर्ग का विस्तार करने में सक्षम था ??
कप्पो

1
मैंने रूबी ऑब्जेक्ट के साथ एक ही चीज़ की कोशिश की और यह काम नहीं करता है ?? >> 'json' => सत्य >> वर्ग व्यक्ति >> Attr_accessor: fname,: lname >> end => nil >> p = Person.new => # <व्यक्ति: 0x101155f70> >> p.fname = "बिल की आवश्यकता होती है "=>" बिल ">> p.lname =" शाइन "=>" शाइन ">> p.to_json =>" \ "# <व्यक्ति: 0x101155f70> \" "
kapso

10
नहीं, नहीं, किसी को यह कोड करना होगा कि मनमाने वर्ग की वस्तु को JSON में कैसे अनुक्रमित किया जाना चाहिए। वे के लिए यह किया Hashऔर Arrayकक्षाओं में jsonमणि, लेकिन अपने वर्ग Personसिर्फ एक मैदान है Object। लेकिन आप Hashइसके बजाय वारिस हो सकते हैं । यदि आप प्रबंधन नहीं करते हैं तो आप एक नया प्रश्न खोल सकते हैं।
म्लाडेन जाबलानोविक

धन्यवाद। यहाँ नया सवाल है, किसी भी मदद की सराहना की जाएगी। धन्यवाद। stackoverflow.com/questions/3226054/…
kapso

आप दिखा रहे हैं कि आईआरबी टाइप आउटपुट क्या दिखता है। मैं DateTime ऑब्जेक्ट के लिए काम करने के लिए हैश # to_json प्राप्त करने की कोशिश कर रहा था। इस पोस्ट के लिए धन्यवाद मुझे मिल गया। लेकिन मैंने p date_json के साथ निरीक्षण किया यह वही है जो मुझे एक सच्चे स्ट्रिंग "{\" वर्ष \ "के लिए मिला है: 2013, \" मोन \ ": 7, \" mday \ ": 16, \" घंटे \ ": 13, \ "मिनट \": 54, \ "सेकंड \": 32, \ "ज़ोन \": \ "- 05:00 \", \ "ऑफसेट \": - 18000} "ताकि आप देख सकें कि यह बना रहा है तार के रूप में महत्वपूर्ण प्रतीक और निश्चित रूप से डेटा अपरिवर्तित है। एक बार फिर धन्यवाद। क्षमा करें, मैं हालांकि इतनी देर से हूँ।
डगलस जी। एलन

19
require 'json/ext' # to use the C based extension instead of json/pure

puts {hash: 123}.to_json

6

आप यह भी उपयोग कर सकते हैं JSON.generate:

require 'json'

JSON.generate({ foo: "bar" })
=> "{\"foo\":\"bar\"}"

या इसका उपनाम JSON.unparse:

require 'json'

JSON.unparse({ foo: "bar" })
=> "{\"foo\":\"bar\"}"

3

अपनी फ़ाइल के शीर्ष पर निम्न पंक्ति जोड़ें

require 'json'

तो आप का उपयोग कर सकते हैं:

car = {:make => "bmw", :year => "2003"}
car.to_json

वैकल्पिक रूप से, आप उपयोग कर सकते हैं:

JSON.generate({:make => "bmw", :year => "2003"})

-1

आपको jsonअपनी फ़ाइल में शामिल करना चाहिए

उदाहरण के लिए,

require 'json'

your_hash = {one: "1", two: "2"}
your_hash.to_json

jsonआपके बारे में अधिक जानकारी के लिए नीचे दिए गए लिंक पर जा सकते हैं। Json Learning

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.