我很困惑为什么我的简单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}
]
默认情况下,不能将类转换为JSON
字符串。您的类中必须有一个to_json
方法,这样您才能使其继承于此类(类型class User < JSONable
):
class JSONable
def to_json
hash = {}
self.instance_variables.each do |x|
hash[x] = self.instance_variable_get x
end
return hash.to_json
end
end
然后,您可以拨打电话to_json
,它将正常运行。
测试:
$ irb
irb(main):001:0> require 'json'
=> true
irb(main):002:0> class JSONable
irb(main):003:1> def to_json
irb(main):004:2> hash = {}
irb(main):005:2> self.instance_variables.each do |x|
irb(main):006:3* hash[x] = self.instance_variable_get x
irb(main):007:3> end
irb(main):008:2> return hash.to_json
irb(main):009:2> end
irb(main):010:1> end
=> nil
irb(main):011:0> class User < JSONable
irb(main):012:1> attr_accessor :name, :age
irb(main):013:1>
irb(main):014:1* def initialize(name, age)
irb(main):015:2> @name = name
irb(main):016:2> @age = age
irb(main):017:2> end
irb(main):018:1> end
=> nil
irb(main):019:0>
irb(main):020:0* user = User.new("hi",3)
=> #<User:0x007fd6c8af0a90 @name="hi", @age=3>
irb(main):021:0> puts user.to_json
{"@name":"hi","@age":3}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句