2012-06-13 31 views
2

我將Ruby on Rails應用程序從3.0遷移到3.1,並遇到了JSON後端更改中的一些問題。在Ruby on Rails應用程序中設置json max_nesting選項

該行ActiveSupport::JSON.decode(some_variable)給我MultiJson :: DecodeError nesting of 20 is too deep。 我試圖解碼的變量實際上是嵌套的(最多29級)。

使用:max_nesting選項('Nesting too deep' error while retrieving JSON using HTTParty)應該可以更改最大嵌套層次,但這似乎不起作用。

ActiveSupport::JSON.decode(some_variable, :max_nesting => false)ActiveSupport::JSON.decode(some_variable, :max_nesting => 100)都會導致相同的錯誤。

有沒有辦法通過max_nesting選項或將其設置爲應用程序範圍?

回答

3

ActiveSupport::JSON採用多JSON寶石的編碼和解碼操作。 multi-json gem支持各種引擎,支持的選項會因此而有所不同。

可以檢查所使用的發動機運行

require 'multi_json' 
puts MultiJson.engine 

我的是MultiJson::Adapters::Yajl,但其他選項也是可能的。 Multi-json似乎沒有以相同的方式將選項傳遞給每個引擎,所以我建議直接使用JSON-gem。

如果您使用的是json-gem,那麼您可以跳過ActiveSupport鏈並使用JSON.parse解析數據,您可以直接向其中傳遞:max_nesting選項。

+4

使用'JSON.parse(some_variable,:max_nesting => false)'解決了問題 – bmesuere

0

試試這個猴子補丁

module JSON 
    class << self 
    def parse(source, opts = {}) 
     opts = ({:max_nesting => 100}).merge(opts) 
     Parser.new(source, opts).parse 
    end 
    end 
end 
+0

你是如何得到這個工作在鐵軌? –