2011-12-19 14 views
0


我有一個字符串,看起來像這樣:{"whatever-field"=>"gghyduudud"}
我想解析它,使它成爲一個哈希。Ruby/Rhomobile:解析目錄字符串表示

請幫忙。

謝謝!

+1

這不是一個字符串,這是一個哈希。在其他語言中,這也被稱爲字典(鍵=>值)。 請詳細說明你要做什麼。 – three

+1

@three我認爲字符串包含'「{\」whatever-field \「=> \」ggh ... \「}」' –

+0

@Svarog通過詞典你的意思是哈希? Afaik「Dictionary」是Python。 –

回答

1

您可以使用eval,但只有當數據源是絕對可靠:

>> eval('{"whatever-field"=>"gghyduudud"}') 
=> {"whatever-field"=>"gghyduudud"} 
+0

這可能是非常危險的,儘管如果它包含其他數據類型是唯一的方法。也許你可以首先在正則表達式上驗證數據? – Linuxios

+0

@ Linux_iOS.rb.cpp.c.lisp.m.sh:這就是爲什麼我說「aboslute reliable」如果它來自用戶不好,如果你發送它自己的字符串就沒問題 – tokland

+0

是的,這就是爲什麼所有的計算機文獻都警告不要使用明確的eval,看起來'eval'被認爲是不好的做法,這裏有很多意義,只是認爲值得一提,當然,如果數據必須來自外部,你可以用自己的線程包裝它,安全級別爲4。僅僅解析字符串有點繁瑣。 – Linuxios

0

這裏是一個解決方案:

dictionary=Hash[*(dict_str[1..dict_str.length-2].split("=>").map {|strval| strval[1..strval.length-2]})] 

,只要你想要的鍵和值作爲字符串,將工作。它有點長,但它爲我工作。

+1

'哈希[*(str.delete('{「}').span('=>'))]'有點短了 – steenslag

+0

我忘了'delete'。謝謝。 – Linuxios