gpt4 book ai didi

Ruby 对象和 JSON 序列化(没有 Rails)

转载 作者:IT老高 更新时间:2023-10-28 12:43:43 25 4
gpt4 key购买 nike

我正在尝试了解 Ruby 中的 JSON 序列化环境。我是 Ruby 新手。

如果您不使用 Rails,是否有任何好的 JSON 序列化选项?

这似乎是这个答案的所在(对 Rails) How to convert a Ruby object to JSON

json gem 似乎让您看起来必须编写自己的 to_json 方法。我无法让 to_json 使用数组和哈希(文档说它适用于这些)json gem 不只是反射(reflect)对象并使用默认的序列化策略是否有原因?这不是 to_yaml 的工作原理吗(在这里猜测)

最佳答案

为了使 JSON 库可用,您可能必须安装 libjson-ruby来自您的包管理器。

使用“json”库:

require 'json'

将一个对象转成JSON(这3种方式是等价的):

JSON.dump object #returns a JSON string
JSON.generate object #returns a JSON string
object.to_json #returns a JSON string

将 JSON 文本转换为对象(这两种方式是等价的):

JSON.load string #returns an object
JSON.parse string #returns an object

对于您自己的类中的对象会有点困难。对于下面的类,to_json 将产生类似 "\"#<A:0xb76e5728>\"" .

class A
def initialize a=[1,2,3], b='hello'
@a = a
@b = b
end
end

这可能是不可取的。为了有效地将您的对象序列化为 JSON,您应该创建自己的 to_json 方法。为此,from_json 类方法会很有用。你可以像这样扩展你的类:

class A
def to_json
{'a' => @a, 'b' => @b}.to_json
end
def self.from_json string
data = JSON.load string
self.new data['a'], data['b']
end
end

您可以通过从“JSONable”类继承来自动执行此操作:

class JSONable
def to_json
hash = {}
self.instance_variables.each do |var|
hash[var] = self.instance_variable_get var
end
hash.to_json
end
def from_json! string
JSON.load(string).each do |var, val|
self.instance_variable_set var, val
end
end
end

那么你可以使用object.to_json序列化为 JSON 和 object.from_json! string将保存为 JSON 字符串的已保存状态复制到对象。

关于Ruby 对象和 JSON 序列化(没有 Rails),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4464050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com