Ruby on rails 如何将ruby哈希对象转换为JSON?
如何将ruby哈希对象转换为JSON?所以我尝试下面这个例子&它不起作用 我正在查看RubyDoc,显然Ruby on rails 如何将ruby哈希对象转换为JSON?,ruby-on-rails,json,ruby,hashmap,Ruby On Rails,Json,Ruby,Hashmap,如何将ruby哈希对象转换为JSON?所以我尝试下面这个例子&它不起作用 我正在查看RubyDoc,显然Hash对象没有to_json方法。但我在博客上看到Rails支持active\u record.to\u json,也支持hash\to\u json。我可以理解ActiveRecord是一个Rails对象,但是Hash不是Rails的原生对象,它是一个纯Ruby对象。所以在Rails中你可以做一个hash.to_json,但在纯Ruby中不行 car = {:make => "bmw
Hash
对象没有to_json
方法。但我在博客上看到Rails支持active\u record.to\u json
,也支持hash\to\u json
。我可以理解ActiveRecord
是一个Rails对象,但是Hash
不是Rails的原生对象,它是一个纯Ruby对象。所以在Rails中你可以做一个hash.to_json,但在纯Ruby中不行
car = {:make => "bmw", :year => "2003"}
car.to_json
Ruby的众多优点之一是可以用自己的方法扩展现有的类。这被称为“类重新打开”或猴子修补(尽管是后者的意思) 那么,看看这里:
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"}"
car={:make=>“bmw”,:year=>“2003”}
#=>{:make=>“宝马”,年份=>“2003”}
car.to_json
#NoMethodError:未定义的{:make=>“bmw”,:year=>“2003”}:Hash的方法“to_json”
#来自(irb):11
#from/usr/bin/irb:12:in`'
需要“json”
#=>正确
car.to_json
#=>“{”制造“:”宝马“,”年份“:”2003“}”
如您所见,要求
json
神奇地将方法带到了我们的散列中。您也可以使用json。生成:
require 'json/ext' # to use the C based extension instead of json/pure
puts {hash: 123}.to_json
require 'json'
JSON.generate({ foo: "bar" })
=> "{\"foo\":\"bar\"}"
或者它的别名,JSON.unparse
:
require 'json'
JSON.unparse({ foo: "bar" })
=> "{\"foo\":\"bar\"}"
在文件顶部添加以下行
require 'json'
然后您可以使用:
car = {:make => "bmw", :year => "2003"}
car.to_json
JSON.generate({:make => "bmw", :year => "2003"})
或者,您可以使用:
car = {:make => "bmw", :year => "2003"}
car.to_json
JSON.generate({:make => "bmw", :year => "2003"})
我只能说哇:)也非常感谢!!所以基本上我能够动态扩展json类??我用Ruby对象做了同样的尝试,但它不起作用???>>需要'json'=>true>>class Person>>attr\u访问器:fname,:lname>>end=>nil>>p=Person.new=>\fname=“Bill”=>“Bill”>>p.lname=“Shine”=>“Shine”>>p.to\u json=>“\”不,不,必须有人编码如何将任意类的对象序列化为json。他们是为json
gem中的Hash
和Array
类做的,但是你的类Person
只是一个普通的对象。但是您可以继承散列
。如果你不努力,你可以提出一个新问题。谢谢。这是一个新问题,任何帮助都将不胜感激。谢谢您正在显示看起来是IRB类型的输出。我试图让hash#to 35; json为DateTime对象工作。多亏了这篇文章,我得到了它。但我确实用p date\u json检查过,这是我得到的真正字符串“{”year\”:2013,“mon\”:7,“mday\”:16,“hour\”:13,“min\”:54,“sec\”:32,“zone\”:“-05:00\”,“offset\”:-18000}”,所以你可能会看到它将关键符号变成字符串,当然数据是不变的。再次感谢。抱歉,我迟到了。JSON.generate只允许将对象或数组转换为JSON语法。然而,to#u json接受许多Ruby类,尽管它仅作为序列化的方法:1.to#u json#=>“1”。此处的文档: