我一直在努力与这一整天。在我的Rails 2.3.5应用程序中,我有一堆自定义代码,允许发生以下事件:调整哈希#to_json
>> strip_hash_keys_for_json({ "a" => 1 }).to_json
=> "{ a: 1 }"
所以你看到字符串键不会被引用。它通过创建一个String
后代类来实现,该类从to_json
返回self
,并且所有的散列键都被封装在这个类中。
今天我已经开始将应用程序升级到Rails 3,并且它已停止工作,因为JSON编码的内容已被相当严重地重写。
正如您可能知道,在Rails 3中产生的哈希值的JSON表示包括两种方法:
as_json
这决定了哈希的元素应该存在于JSONencode_json
这实际上回报一个包含JSON的字符串表示形式
我想通过观察encode_json
做什么来改变事情发生的方式,并且调整了一些获取c的方法从那里出发。
问题是这两个方法根本不会被调用。我检查了我在调查中可能犯的每一个愚蠢的错误,并且我没有看到任何错误。谷歌也没有帮助,所以我转向SO研究员寻求帮助。
非常感谢。
UPDATE
行,所以我想通了,为了让这些方法来工作,我必须使用ActiveSupport::JSON::encode
,而不是直接to_json
。这看起来很奇怪,因为 我认为{}.to_json
是由在encoding.rb
文件中定义的Object#to_json
方法处理的,该文件又调用ActiveSupport::JSON.encode(self, options)
。
现在我完全困惑。
你得到了什么是to_json'的'标准的行为。但是,我期望的行为是不引用字符串键。我有不清楚的问题吗? – 2010-06-27 08:36:12
我明白了。我将代码示例看作是不需要的行为。 – 2010-06-27 09:17:28
有效的JSON需要引用字符串键。 – 2011-04-29 00:19:13