为什么我的ruby类不转换为json?

布兰克曼

我很困惑为什么我的简单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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的UTC即时不转换为BST?

如果我不写{get ;,为什么我不能将DynamicJson转换为我的班级?放;}

为什么我的GLSL转换不呈现?

为什么我可以将0转换为std :: shared_ptr <T>而不转换为1?

当我尝试转换为int时,ruby为什么会引发错误?

为什么我不能将具有不可复制类参数的 lambda 转换为 std::function?

为什么我们可以将Java接口转换为* any *非最终类?

为什么operator <<不会隐式将我的定制类对象转换为字符串

爪哇。为什么我不能将接口对象转换为类对象?

为什么我可以使用CRTP将基类的this指针转换为子类的指针?

为什么从JSON文字类型转换为类型不包含函数

为什么我无法在json数据上调用.get /如何将json转换为地图

为什么我不找回JSON内容?

为什么在将批量 csv 转换为 json 时我的代码不起作用?

为什么我的多部分表单数据会转换为JSON?

为什么HashMap值不转换为List?

为什么此类不隐式转换为指针?

将Ruby哈希转换为JSON(不包含转义字符)

为什么我不能在不损失JS精度的情况下将字符串转换为数字?

为什么将字典键转换为继承的类类型?

Java Customs类实例不能转换为String。为什么?

为什么字符串不能转换为对象类

为什么 JavaScript 不将类数组对象转换为数组?

为什么我的Ruby频率哈希不添加值?

为什么 Ruby STDOUT 在我不希望缓冲时会缓冲?

将类转换为功能组件..我做错了什么?

为什么在Java.utils中将枚举转换为ArrayList而不转换为List?

SQL Server:为什么转换为日期使用索引并转换为 nvarchar 不?

为什么我的jar文件不包含任何类文件?