调整Hash#to_json

时间:2010-06-26 18:40:58

标签: ruby-on-rails ruby json hash

我一整天都在努力解决这个问题。在我的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

现在我完全糊涂了。

1 个答案:

答案 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}"