Rails 3.2:用json序列化中的空字符串替换空值

时间:2012-05-30 07:15:40

标签: ruby-on-rails ruby json serialization ruby-on-rails-3.2

我使用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。

我怎样才能做到这一点?

最诚挚的问候,

3 个答案:

答案 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