如何将 Sequel 结果序列化为 JSON
How to serialize a Sequel result into JSON
这是我的模特
class Client < Sequel::Model(:clients)
end
当我执行
Client.first.to_json
我明白了
"\"#<Client:0x2594b824>\""
但是当我执行
DB[:clients].first.to_json
我正确地得到:
{id: 1, name: "Someone" ... }
我做错了什么?...我也尝试使用 Client.dataset.first.json
得到相同的结果。
我也在使用 MS Access 数据库,但我认为这不重要。
您需要使用to_hash
:
require 'json'
require 'sequel'
DB = Sequel.sqlite
DB.create_table :items do
primary_key :id
String :name
Float :price
end
items = DB[:items]
items.insert(:name => 'abc', :price => rand * 100)
class Item < Sequel::Model(:items)
end
Item.first
.to_hash # => {:id=>1, :name=>"abc", :price=>51.47074347440235}
.to_json # => "{\"id\":1,\"name\":\"abc\",\"price\":51.47074347440235}"
json
库(Ruby 标准库的一部分)和其他 gem,例如 ActiveSupport,带有 to_json
方法的猴子补丁对象,这可能是被调用的方法,而不是 Sequel 提供的特定 to_json
方法,它知道如何将 Sequel::Model
实例转换为 JSON。这是猜测,因为我很惊讶 JSON 库猴子修补了 String
、Array
、Hash
等以外的任何东西
当使用 DB[:clients].first
时,你可能会得到一个 Hash
,它有一个 to_json
方法,而 Client.first
returns 是一个模型实例,它不是t 由 json 库提供的通用 to_json
方法处理。
尝试注册 Sequel JSON 插件,这应该优先于 monkey patched to_json
方法:
Sequel::Model.plugin :json_serializer
顺便说一句,这很好地说明了为什么猴子修补通常不是一个好主意,尤其是在 libraries/gems 命名空间之外的 类 猴子修补。
这是我的模特
class Client < Sequel::Model(:clients)
end
当我执行
Client.first.to_json
我明白了
"\"#<Client:0x2594b824>\""
但是当我执行
DB[:clients].first.to_json
我正确地得到:
{id: 1, name: "Someone" ... }
我做错了什么?...我也尝试使用 Client.dataset.first.json
得到相同的结果。
我也在使用 MS Access 数据库,但我认为这不重要。
您需要使用to_hash
:
require 'json'
require 'sequel'
DB = Sequel.sqlite
DB.create_table :items do
primary_key :id
String :name
Float :price
end
items = DB[:items]
items.insert(:name => 'abc', :price => rand * 100)
class Item < Sequel::Model(:items)
end
Item.first
.to_hash # => {:id=>1, :name=>"abc", :price=>51.47074347440235}
.to_json # => "{\"id\":1,\"name\":\"abc\",\"price\":51.47074347440235}"
json
库(Ruby 标准库的一部分)和其他 gem,例如 ActiveSupport,带有 to_json
方法的猴子补丁对象,这可能是被调用的方法,而不是 Sequel 提供的特定 to_json
方法,它知道如何将 Sequel::Model
实例转换为 JSON。这是猜测,因为我很惊讶 JSON 库猴子修补了 String
、Array
、Hash
等以外的任何东西
当使用 DB[:clients].first
时,你可能会得到一个 Hash
,它有一个 to_json
方法,而 Client.first
returns 是一个模型实例,它不是t 由 json 库提供的通用 to_json
方法处理。
尝试注册 Sequel JSON 插件,这应该优先于 monkey patched to_json
方法:
Sequel::Model.plugin :json_serializer
顺便说一句,这很好地说明了为什么猴子修补通常不是一个好主意,尤其是在 libraries/gems 命名空间之外的 类 猴子修补。