如何将 Ruby 对象转换为 JSON

Posted

技术标签:

【中文标题】如何将 Ruby 对象转换为 JSON【英文标题】:How to convert a Ruby object to JSON 【发布时间】:2011-03-14 15:41:23 【问题描述】:

我想做这样的事情:

require 'json'

class Person
attr_accessor :fname, :lname
end

p = Person.new
p.fname = "Mike"
p.lname = "Smith"

p.to_json

有可能吗?

【问题讨论】:

【参考方案1】:

是的,您可以使用to_json

如果你没有运行 Rails,你可能需要require 'json'

【讨论】:

在 Rails 中,没有必要使用require 'json',但是对于常规的 Ruby 代码,它可能是必要的。 JSON is part of Ruby's Standard Library 所以它带有语言。【参考方案2】:

为了让您的 Ruby 类在不接触 Rails 的情况下对 JSON 友好,您需要定义两种方法:

to_json,返回一个 JSON 对象 as_json,返回对象的哈希表示

当您的对象正确响应 to_jsonas_json 时,即使它嵌套在 Array 和/或 Hash 等其他标准类的深处,它也可以正常运行:

#!/usr/bin/env ruby

require 'json'

class Person

    attr_accessor :fname, :lname

    def as_json(options=)
        
            fname: @fname,
            lname: @lname
        
    end

    def to_json(*options)
        as_json(*options).to_json(*options)
    end

end

p = Person.new
p.fname = "Mike"
p.lname = "Smith"

# case 1
puts p.to_json                  # output: "fname":"Mike","lname":"Smith"

# case 2
puts [p].to_json                # output: ["fname":"Mike","lname":"Smith"]

# case 3
h = :some_key => p
puts h.to_json                  # output: "some_key":"fname":"Mike","lname":"Smith"

puts JSON.pretty_generate(h)    # output
                                # 
                                #   "some_key": 
                                #     "fname": "Mike",
                                #     "lname": "Smith"
                                #   
                                # 

另见“Using custom to_json method in nested objects”。

【讨论】:

【参考方案3】:

试试看。如果您使用的是 Ruby on Rails(并且标签上说您是),我认为这个确切的代码应该已经可以工作了,不需要任何东西。

Rails 支持来自控制器的 JSON 输出,因此它已经引入了您将需要的所有 JSON 序列化代码。如果您打算通过控制器输出此数据,则只需编写即可节省时间

render :json => @person

【讨论】:

什么是人有关联? 此答案仅适用于 Rails 项目。香草红宝石怎么样? 我想说它甚至不适用于 Rails.. 它只适用于 Rails 应用程序内的控制器.. 范围非常有限。

以上是关于如何将 Ruby 对象转换为 JSON的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JSON 转换为 Ruby 哈希

Rails:如何将对象数组的哈希转换为 json

如何在 Ruby 中将 IO 对象转换为字符串?

json字符串转换成对象,对象为空,如何解决

JavaScript:如何将JSON对象转换成JSON字符串呢

如何将数据实体转换为 JSON 字符串