我一整天都在努力解决这个问题。在我的Rails 2.3.5应用程序中,我有一堆自定义代码,允许以下情况发生:
>> strip_hash_keys_for_json({ "a" => 1 }).to_json
=> "{ a: 1 }"
所以你看到字符串键没有被引用。它是通过创建从String
返回self
的{{1}}后代类来实现的,并且所有哈希键都包含在此类中。
今天我开始将应用程序升级到Rails 3,它已经停止工作,因为JSON编码的东西已经被认真地重写了。
您可能知道,在Rails 3中,创建哈希的JSON表示涉及两种方法:
to_json
确定在JSON中应该存在哈希的哪些元素as_json
实际上返回包含JSON 我认为我可以通过观察encode_json
所做的事情来改变事情的发生方式,并调整一些从那里调用的方法。
问题是这两种方法根本没有被调用。我已经检查了我在调查中可能犯的每一个愚蠢的错误,我都没有看错。谷歌也没有任何帮助,所以我向SO研究员寻求帮助。
非常感谢。
更新
好的,所以我发现为了让这些方法有效,我必须直接使用encode_json
而不是ActiveSupport::JSON::encode
。这看起来很奇怪,因为
我认为to_json
由同一{}.to_json
文件中定义的Object#to_json
方法处理,后者又调用encoding.rb
。
现在我完全糊涂了。
答案 0 :(得分:0)
删除strip_hash_keys_for_json后会发生什么?
我打开了一个控制台并得到了:
ruby-1.8.7-p249 > Rails::VERSION::STRING
=> "2.3.5"
ruby-1.8.7-p249 > { "a" => 1 }.to_json
=> "{\"a\":1}"