我使用Rails 3.2 serialization将ruby对象转换为json。
例如,我已将ruby对象序列化为以下json
{
"relationship":{
"type":"relationship",
"id":null,
"followed_id": null
}
}
在我的类关系中使用以下序列化方法< ActiveRecord::Base
def as_json(opts = {})
{
:type => 'relationship',
:id => id,
:followed_id => followed_id
}
end
我需要用空字符串替换空值,即空双引号,以响应json。
我怎样才能做到这一点?
最诚挚的问候,
答案 0 :(得分:4)
可能不是最好的解决方案,但受到answer
的启发def as_json(opts={})
json = super(opts)
Hash[*json.map{|k, v| [k, v || ""]}.flatten]
end
- 编辑 -
根据jdoe的评论,如果您只想在json响应中包含一些字段,我更喜欢这样做:
def as_json(opts={})
opts.reverse_merge!(:only => [:type, :id, :followed_id])
json = super(opts)
Hash[*json.map{|k, v| [k, v || ""]}.flatten]
end
答案 1 :(得分:3)
我没有在这里看到问题。只需通过||
运营商:
def as_json(opts = {})
{
:type => 'relationship',
:id => id || '',
:followed_id => followed_id || ''
}
end
答案 2 :(得分:0)
使用以下方法,您将获得修改后的哈希或json对象。它将用nill替换空白字符串。需要在参数中传递哈希值。
def json_without_null(json_object)
if json_object.kind_of?(Hash)
json_object.as_json.each do |k, v|
if v.nil?
json_object[k] = ""
elsif v.kind_of?(Hash)
json_object[k] = json_without_null(v)
elsif v.kind_of?(Array)
json_object[k] = v.collect{|a| json_without_null(a)}
end
end
end
json_object
end