Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将ruby哈希对象转换为JSON?_Ruby On Rails_Json_Ruby_Hashmap - Fatal编程技术网

Ruby on rails 如何将ruby哈希对象转换为JSON?

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

如何将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", :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”。此处的文档: