我的控制器在 params 中接收到一个 JSON 字符串,如下所示:
{"serialized"=>"{\"key\":{\"subkey1\":"value",\"subkey2\":"value"}"}
在我的控制器中,我尝试以下操作:
JSON.parse(params[:serialized], symbolize_names: true)
返回:
{:"key"=>{:subkey1=>"value", :subkey2=>"value"}
所有嵌套的子键都被符号化了;密钥以一种奇怪的方式符号化,因此它不响应hash[key],而是响应hash["key"]。
如果我通过 Rails 堆栈:
ActiveSupport::JSON.decode(params[:serialized]).symbolize_keys
我得到以下信息:
{:"key"=>{"subkey1"=>"value", "subkey2"=>"value"}
除了嵌套键外,几乎与第一个相同;他们没有被象征化。
我什至尝试通过哈希循环尝试手动符号化键;虽然没有成功:
Hash[params[:serialized]{ |k, v| [k.to_sym, v] }] # returns {:"key"=>{"subkey1"=>"value", "subkey2"=>"value2"}
为什么会这样?为什么键符号为:"key"而不是:key?
UPD 删除了最后一行(我怎么可能解决这个问题,因为我需要我的哈希来回答hash[key]而不是hash["key"]。)所以这个问题看起来不那么务实,更理论化。