2010-07-06 27 views
257

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

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

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

उत्तर

449

रुबी के कई नब्बे के दशक में मौजूदा वर्गों को अपने स्वयं के तरीकों से विस्तारित करने की संभावना है। इसे "क्लास फिर से खोलना" या बंदर-पैचिंग कहा जाता है (हालांकि बाद में can vary का अर्थ)। json की आवश्यकता होती है जादुई हमारे Hash को विधि to_json लाया गया है

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"}" 

आप देख सकते हैं,:

तो, एक नज़र यहाँ ले लो।

+2

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

+1

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

+8

नहीं, नहीं, किसी को कोड करना है कि मनमानी वर्ग की वस्तु को JSON पर क्रमबद्ध किया जाना चाहिए। उन्होंने 'जेसन' मणि में 'हैश' और 'ऐरे' कक्षाओं के लिए यह किया, लेकिन आपकी कक्षा 'व्यक्ति' सिर्फ एक सादा 'वस्तु' है। लेकिन आप इसके बजाए 'हैश' का उत्तराधिकारी बना सकते हैं। यदि आप प्रबंधित नहीं करते हैं तो आप एक नया प्रश्न खोल सकते हैं। –

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

puts {hash: 123}.to_json 
संबंधित मुद्दे