2014-10-20 1 views
1

문자열이 있습니다. 값으로 저장되는 { "response_code"=> "SUCCESS", "authorisation_result"=> "Approved", "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만을 제공합니다.

+0

이 아마도 당신이 다음, 대신 JSON을 저장할 수 JSON 함수를 사용하여 문자열을 값으로 안전하게 다시 변환 할 수 있습니다. 실제로 Ruby 소스 코드를 데이터베이스에 저장하고 있습니까? –

+0

실제 답변은 "hstore 사용을 중지하고 PostgreSQL의 json 열 유형을 대신 사용하십시오"입니다. –

답변

2

루비 해시가 JSON 꽤 유사 (I 대답이 답변으로 표시된 된 방법을 이해하지 않습니다), 그래서 이것은 당신의 예를 들어 작동합니다 :

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} 
+0

처음 누군가가'=>'문자를 따옴표 붙은 문자열 안에 넣을 때까지 작동합니다. –

+0

@GregHewgill 또는': \ w +'와 일치하는 것이므로 이상적인 것은 아닙니다. – August

+0

내 정확한 질문에 맞을 것이다. 그러나 더 좋은 대답이 있는지보기 위해 조금 열어 두겠다. (이 하나는 굉장하다.) – baash05