gpt4 book ai didi

ruby - 为什么我的 ruby​​ 类没有转换为 json?

转载 作者:数据小太阳 更新时间:2023-10-29 08:07:31 25 4
gpt4 key购买 nike

我很困惑为什么我的简单 ruby​​ 对象没有转换为 json。

>irb
>
require 'json'

class User
attr_accessor :name, :age

def initialize(name, age)
@name = name
@age = age
end
end

u1 = User.new("a", 1)
u2 = User.new("b", 2)

puts u1.to_json
"\"#<User:0x000001010e9f78>\""

我错过了什么?

然后我想将这些对象存储到一个数组集合中,然后将整个集合转换为json。

users = []
users << User.new("a", 1)
users << User.new("b", 2)

users.to_json

注意:这不是使用 Rails,只是普通的旧 Ruby!

我希望我的 json 是一个用户对象数组。

[
{"name": "john", "age": 22},
{"name": "john1", "age": 23}
{"name": "john2", "age": 24}
]

最佳答案

to_json 的默认实现非常简单,显然没有达到您的预期。这是意料之中的:您需要编写代码来向解释器解释您希望程序如何运行。

提供 to_jsonas_json 方法是一个通用标准。后者返回实例的 JSON 序列化版本(通常是 Hash),后者是实际的 JSON 输出。

class User
attr_accessor :name, :age

def initialize(name, age)
@name = name
@age = age
end

def as_json(*)
{ name: @name, age: @age }
end

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

这是输出

2.3.0 :034 > u1.as_json
=> {:name=>"a", :age=>1}
2.3.0 :035 > puts u1.to_json
{"name":"a","age":1}
=> nil

只需稍加努力,您就可以更改 as_json 以自动收集所有实例变量。但是,我不鼓励这种方法,因为您最终可能会序列化您不想共享的敏感属性(例如密码)。

关于ruby - 为什么我的 ruby​​ 类没有转换为 json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34914287/

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