相关疑难解决方法(0)

将虚拟属性添加到json输出

假设我有一个处理TODO列表的应用程序.该清单已完成和未完成的项目.现在我想向列表对象添加两个虚拟属性; 列表中已完成和未完成的项目数.我还需要在json输出中显示这些.

我的模型中有两个方法可以获取未完成/已完成的项目:

def unfinished_items 
  self.items.where("status = ?", false) 
end 

def finished_items 
  self.items.where("status = ?", true) 
end
Run Code Online (Sandbox Code Playgroud)

那么,我怎样才能在json输出中得到这两个方法的计数?

我正在使用Rails 3.1

json ruby-on-rails

61
推荐指数
3
解决办法
3万
查看次数

在嵌套对象中使用自定义to_json方法

我有一个使用Ruby标准库中的Set类的数据结构.我希望能够将我的数据结构序列化为JSON字符串.

默认情况下,将序列化设置为数组:

>> s = Set.new [1,2,3]
>> s.to_json
=> "[1,2,3]"
Run Code Online (Sandbox Code Playgroud)

在尝试反序列化之前哪个是好的.

所以我定义了一个自定义to_json方法:

class Set
  def to_json(*a)
    {
      "json_class" => self.class.name,
      "data" => {
        "elements" => self.to_a
      }
    }.to_json(*a)
  end

  def self.json_create(o)
    new o["data"]["elements"]
  end
end
Run Code Online (Sandbox Code Playgroud)

哪个效果很好:

>> s = Set.new [1,2,3]
>> s.to_json
=> "{\"data\":{\"elements\":[1,2,3]},\"json_class\":\"Set\"}"
Run Code Online (Sandbox Code Playgroud)

直到我把Set放入哈希或其他东西:

>> a = { 'set' => s }
>> a.to_json
=> "{\"set\":[1,2,3]}"
Run Code Online (Sandbox Code Playgroud)

知道为什么to_json当Set嵌套在另一个对象中时我的自定义不被调用?

ruby serialization json

9
推荐指数
1
解决办法
9599
查看次数

标签 统计

json ×2

ruby ×1

ruby-on-rails ×1

serialization ×1