有没有办法将对象转换为json或其他可打印格式?

时间:2014-10-19 13:08:37

标签: ruby

我有一个对象,我想要转储所有信息。

出于调试目的,我可以将其转换为json或其他合适的格式吗?

我知道使用p对象,有时可以打印出所有信息;但不总是。所以我在问p对象变得无效时还有其他方法

4 个答案:

答案 0 :(得分:2)

尝试pry

非常适合探索物体。特别是大型对象,因为它有分页。对象也采用颜色编码,使其更具可读性。

步骤:

  1. 安装pry
  2. 添加要求' pry'到您要调试的脚本文件
  3. 在对象在范围内的任何位置的对象声明下面添加binding.pry
  4. 运行您的脚本
  5. 这将弹出pry控制台,可以访问您的对象
  6. 输入对象名称
  7. ' ls object'将列出对象的所有实例变量

答案 1 :(得分:1)

你可以通过几种方式去。使用标准库中的json是将对象转换为json的一种方法。

这会将ruby中的对象转换为json字符串:

require "json" h = Hash.new(name: "example") JSON.dump(h)

但你似乎想要详细检查一个物体。最好的解决方案可能是" Pry"如果你真的需要很多细节,其他人建议的宝石。 所以安装撬后你可以" cd"进入对象并检查实例变量public / private方法和方法/类的源代码等,这真是太棒了。

require "pry" cd SomeObject ls # this shows you everything defined in the object.

其他人建议的object.inspect的问题是它可以被覆盖,通常是,因此不会向您显示足够的信息。所以这取决于你想要找到什么。 puts o.instance_variables #=> shows all an objects instance variable names puts o.instance_variable_get :@some_var #=> returns the value held by @some_var puts o.methods - Object.methods #=> roughly speaking, shows you the methods defined on an object itself and not inheritted from parent objects

不幸的是,这里不是一个完美的答案,但出于调试目的,我个人认为没有什么比pry调试器插件宝石(忘记实际名称)更容易撬开,它允许您逐步调试调用堆栈。

答案 2 :(得分:0)

你可以使用“inspect”:“返回一个包含obj的人类可读表示的字符串。默认情况下,显示类名和实例变量列表及其值(通过对每个变量调用inspect)。 “

示例:

puts object.inspect

答案 3 :(得分:0)

您可以尝试puts my_object.as_json.to_json