关于Ruby对象和JSON序列化(不含Rails)的问题?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (66)

我想了解Ruby中的JSON序列化格局。我是Ruby的新手。

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

提问于
用户回答回答于

如果渲染性能至关重要,那么可能还需要查看yajl-ruby,它是对C yajl库的绑定。该版本的序列化API如下所示:

require 'yajl'
Yajl::Encoder.encode({"foo" => "bar"}) #=> "{\"foo\":\"bar\"}"
用户回答回答于

为了使JSON库可用,可能需要libjson-ruby从包管理器进行安装。

要使用'json'库:

require 'json'

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

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
class A
    def initialize a=[1,2,3], b='hello'
        @a = a
        @b = b
    end
end
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

扫码关注云+社区