我有一个哈希表需要转储为 JSON,但其中一个值是一个对象:
这似乎是JSON库应该处理的事情,但我猜它们不会。为什么?它们不能/不应该有编程原因吗?还是我漏了什么?
编辑:
进一步搜索后发现,我在最初的测试中肯定弄错了什么。Oj可以使用:compat选项递归地转储JSON:
hash = { a: my_object }
如果我尝试使用类似MultiJson.dump(hash)
的方法,则只会序列化顶层哈希表,而不会序列化其内部结构,结果将会是:
'{"a": #<...>}'
即使该对象已经具有to_json、to_hash等方法,MultiJson.dump(my_object)
仍能正常工作。这似乎是JSON库应该处理的事情,但我猜它们不会。为什么?它们不能/不应该有编程原因吗?还是我漏了什么?
编辑:
进一步搜索后发现,我在最初的测试中肯定弄错了什么。Oj可以使用:compat选项递归地转储JSON:
Oj.dump(my_object, mode: :compat)
MultiJson使用Oj默认传递此选项,所以那也可以用。虽然根据Oj文档,我不确定为什么这样做可以。即使没有任何as_hash或to_json方法,它也可以正常工作。
#to_json
方法。 - David Unric