2014-04-20 56 views
0

我有一個字符串對象,它從控制器返回,如下所示。將字符串轉換爲散列並以json格式在ruby中輸出

details = "{"name"=>"David", "age"=>"12", "emp_id"=>"E009", "exp"=>"10", 
"company"=>"Starlink"}" 

所以details.class應該是String。 我需要將其轉換爲哈希並以Json格式輸出。因此輸出格式將低於 格式。我知道使用eval方法可以完成。但我認爲會有安全問題。所以請建議最好的方法來做到這一點。

{ 
    "name":"David", 
    "age":"12", 
    "emp_id":"E009", 
    "exp":"10", 
    "company":"Starlink" 
} 

我該如何實現它。請幫忙

+0

你是正確的,EVAL是太危險了。這是解析時間。正則表達式來獲得雙引號內的所有匹配,然後將它們視爲成對 –

+0

是否返回'details =「{」name「=>」David「,」age「=>」12「,」emp_id「=>」E009「 ,「exp」=>「10」, 「company」=>「Starlink」}「'或'details ='{」name「=>」David「,」age「=>」12「,」emp_id「= >「E009」,「exp」=>「10」, 「company」=>「Starlink」}「'因爲第一個導致**語法錯誤,意外的tIDENTIFIER,期待輸入結束**。 – onurozgurozkan

回答

1

看起來你應該去你的API供應商,並告訴他他有一個bug,因爲Hash.inspect不是一個有效的序列化,因爲它不是標準的,並且可能不總是可逆的。

如果你得到的是在上面,雖然形式,你可以運行它gsub後,把它當作一個JSON:

formatted_details = JSON.pretty_generate(JSON.parse(details.gsub('=>', ':'))) 
puts formatted_details 
# => { 
     "name": "David", 
     "age": "12", 
     "emp_id": "E009", 
     "exp": "10", 
     "company": "Starlink" 
    } 
+0

不錯,只要價值從來沒有在他們的冒號... –

+1

@TonyHopkinson - 你的意思是價值觀沒有''=>''在他們中......我可以忍受那個... –

+0

嗯看起來像我誤解了這個問題,不太可能有=>,儘管可能。正則表達式像/"(.*)":"(.*)"/是我的第一次嘗試 –

相關問題