我在我的项目中使用Hamster gem,在序列化到json时我遇到了问题。我要说的是:
hamster = Hamster.vector()
=> [] #is empty
hamster.to_json
=> "{\"levels\":0,\"root\":[],\"size\":0}" # what is this?所以,我的问题是:
有人能解释一下为什么Hamster向对象添加levels、root和size键,以及如何从json中删除它们。
发布于 2014-03-18 18:08:51
hamster = Hamster.vector()
=> [] #is emptyHamster.vector()返回Hamster::Vector类的单例实例(EmptyVector)。
[]显示为输出,因为Enumerable#reduce被仓鼠覆盖。
levels、root和size是在Hamster::Vector#initialize方法中初始化的类Hamster::Vector的实例变量。
因此,当您hamster.to_json时,您将输出视为
=> "{\"levels\":0,\"root\":[],\"size\":0}"使用Hamster::Vector#empty?方法检查您的hamster对象是否为空?即@size == 0
hamster.to_json unless hamster.empty?这样,如果仓鼠是空对象,就不会将其转换为json。
发布于 2014-08-13 16:34:20
一个更好的解决方案是hamster.to_a.to_json。
发布于 2016-05-05 22:01:37
目前版本的仓鼠有一个.to_ruby函数,这是有用的。
Hamster::Vector[].to_json # => "\"#<Hamster::Vector:0x0000000238b678>\""
Hamster.to_ruby(Hamster::Vector[]) # => []
Hamster.to_ruby(Hamster::Vector[]).to_json # => "[]"您可以阅读更多关于Hamster.to_ruby 这里的内容。
好的是它适用于仓鼠定义的每一种类型。如果传递的参数是'nil‘,它也只返回'nil’。
https://stackoverflow.com/questions/22485645
复制相似问题