Ruby on rails 在从Ruby对象呈现JSON之前,如何将nil更改为null?
我有一个像这样的arel对象:Ruby on rails 在从Ruby对象呈现JSON之前,如何将nil更改为null?,ruby-on-rails,ruby,json,activerecord,Ruby On Rails,Ruby,Json,Activerecord,我有一个像这样的arel对象: #<Event:0x000001097d5fa0> { :id => 6302, :zone_id => nil, :date => Thu, 02 Jan 2014 09:13:17 UTC +00:00, :status => 1, :created_at => Thu
#<Event:0x000001097d5fa0> {
:id => 6302,
:zone_id => nil,
:date => Thu, 02 Jan 2014 09:13:17 UTC +00:00,
:status => 1,
:created_at => Thu, 02 Jan 2014 09:13:17 UTC +00:00,
:updated_at => Fri, 03 Jan 2014 09:22:16 UTC +00:00,
:description => "New alert",
:controller_id => 699,
:event_type => 10,
:is_fault => false,
:delta => true
}
JSON验证器抱怨nil
不是字符串。JSON应该是null
,而不是字符串,所以我想我只是转换它,没什么大不了的
因此,我陷入了困境,我意识到我想在使用对象之前了解更多关于更新对象的信息
更新_属性会将记录保存回数据库-不希望这样。
assign_attributes只会更改对象中的属性值-确实需要这样做
但是
分配属性!实际上不会替换我的对象并将其推回到结果中
因此,对于我必须迭代一组散列(result),我尝试在适当的位置操作每个Ruby对象,然后通过render提供它
可能有更好的方法来解决这个问题,但这是我的目标。如何将nil更改为null?您只需调用
render:json=>result.to_json
它将为您处理所有转换,包括nil
到null
,例如
require 'json'
[nil].to_json
#=> "[null]"
{blah: nil}.to_json
#=> "{\"blah\":null}"
对于我来说
nil.to_json
返回“null”。你能试试吗,比如在IRB中?这将不会输出JSONnull
,而是输出一个字符串“null”,该字符串不相同,甚至计算结果为true。@Chris它会输出JSON null。如果null在本例中是一个字符串,它将被括在引号中,而引号不是{blah:nil}。to_json
将被转换为json,作为{blah:null}
注意null
没有被引用nil.to_json
将为“null”,但当嵌套在数组
或散列
中时(这在json构造中更可能是null
作为值而不是字符串)
require 'json'
[nil].to_json
#=> "[null]"
{blah: nil}.to_json
#=> "{\"blah\":null}"