我一直在努力與這一整天。在我的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