我已经盯着这个看了这么久,我在转圈……
我正在使用 rbvmomi gem,在 Pry 中,当我显示一个对象时,它会通过显示嵌套对象的结构向下递归 - 但 to_json 似乎“深入”到某些对象中,但只是转储其他对象的引用>这是一个例子:
[24] pry(main)> g
=> [GuestNicInfo(
connected: true,
deviceConfigId: 4000,
dynamicProperty: [],
ipAddress: ["10.102.155.146"],
ipConfig: NetIpConfigInfo(
dynamicProperty: [],
ipAddress: [NetIpConfigInfoIpAddress(
dynamicProperty: [],
ipAddress: "10.102.155.146",
prefixLength: 20,
state: "preferred"
)]
),
macAddress: "00:50:56:a0:56:9d",
network: "F5_Real_VM_IPs"
)]
[25] pry(main)> g.to_json
=> "[\"#<RbVmomi::VIM::GuestNicInfo:0x000000085ecc68>\"]"
Pry 显然只是使用了一个加强版的 pp,虽然“pp g”让我接近我想要的,但我还是尽可能地转向 json,这样我就不需要自定义解析器来加载和操纵结果。
问题是 - 我怎样才能让 json 模块像 pp 一样深入挖掘?如果答案是“你不能”——还有其他实现目标的建议吗?我没有嫁给 json - 如果我可以将数据序列化并稍后读回(无需编写任何东西来解析 pp 输出......这可能已经存在,我应该寻找它),那么这一切都是胜利。
我的“真正”目标是通过 rbvmomi 从我们的 vsphere 内容中获取大量信息,以便我可以对其进行一些网络/虚拟机分析,这就是为什么我想以一种很好的机器解析格式获取它. 如果我在这里做了一些愚蠢的事情并且有更简单的方法来解决这个问题 - 把它放在我身上,我并不感到骄傲。感谢大家的时间和关注。
更新:根据 Arnie 的回复,我将这个猴子补丁添加到我的脚本中:
class RbVmomi::BasicTypes::DataObject
def to_json(*args)
h = self.props
m = h.merge({ JSON.create_id => self.class.name })
m.to_json(*args)
end
end
现在我的 to_json 很好地递归下来。我会看到关于提交这个(或def,真的)到项目。