如何将字符串转换为哈希值而不是EVAL

时间:2014-10-20 01:30:21

标签: ruby-on-rails postgresql hstore

我有一个字符串。 {" response_code" =>" SUCCESS"," authorisation_result" =>"已批准"," transaction_number" = >" 1234567"," receipt_number" =>" 999999",:cents => 100}在postgresql中作为值存储在hstore中。

所以它是一个原始字符串而不是YAML或JSON 我想知道如何将值返回到用于插入记录的哈希值。

使用EVAL的想法吓坏了我,因为这里有潜在的使用输入。

<小时/> 这个问题似乎是How to convert a string to a hash in ruby/rails without using eval?的翻版,但那里的答案并没有与问题相提并论。它只提供eval作为解决方案。 (我不明白答案是如何标记为答案的)

1 个答案:

答案 0 :(得分:3)

Ruby哈希看起来与JSON非常相似,所以这适用于您的示例:

require 'json'

str = "{\"response_code\"=>\"SUCCESS\", \"authorisation_result\"=>\"Approved\", \"transaction_number\"=>\"1234567\", \"receipt_number\"=>\"999999\", :cents=>100}"

JSON.parse str.gsub(/:(\w+)/){"\"#{$1}\""}.gsub('=>', ':')
# => {"response_code"=>"SUCCESS", "authorisation_result"=>"Approved", "transaction_number"=>"1234567", "receipt_number"=>"999999", "cents"=>100}