【发布时间】:2011-03-08 16:38:46
【问题描述】:
我一整天都在为此苦苦挣扎。在我的 Rails 2.3.5 应用程序中,我有一堆自定义代码允许发生以下情况:
>> strip_hash_keys_for_json({ "a" => 1 }).to_json
=> "{ a: 1 }"
所以你看到字符串键没有被引用。它是通过创建一个从to_json返回self的String后代类来实现的,并且所有的哈希键都包装在这个类中。
今天我已经开始将应用程序升级到 Rails 3,它已经停止工作,因为 JSON 编码的东西已经被非常认真地重写了。
您可能知道,在 Rails 3 中创建哈希的 JSON 表示涉及两种方法:
-
as_json决定 JSON 中应该存在哪些哈希元素 -
encode_json实际上返回一个包含 JSON 的字符串表示
我认为我可以通过观察 encode_json 所做的事情并调整一些从那里调用的方法来改变事情发生的方式。
问题是这两个方法根本没有被调用。我检查了我在调查中可能犯的每一个愚蠢的错误,我看不出有什么问题。 Google 也无济于事,所以我求助于 SO Fellows。
非常感谢。
更新
好的,所以我发现为了使这些方法起作用,我必须直接使用ActiveSupport::JSON::encode 而不是to_json。这看起来很奇怪,因为
我认为{}.to_json 是由同一个encoding.rb 文件中定义的Object#to_json 方法处理的,该文件又调用ActiveSupport::JSON.encode(self, options)。
现在我完全糊涂了。
【问题讨论】:
标签: ruby-on-rails ruby json hash