[英]Find hashes in a Ruby string
我有一個看起來像這樣的字符串:
greetings = <<-GREETINGS
[{a: "hello", b: "goodbye"}, {a: "guten tag", b: "auf wiedersehen"}]
GREETINGS
我怎樣才能拆分這個字符串,以便返回一個哈希數組?
require 'json'
JSON.parse(greetings.gsub(/(\p{Alnum})+:/, '"\1":')).
map { |h| h.transform_keys(&:to_sym) }
#=> [{:a=>"hello", :b=>"goodbye"},
# {:a=>"guten tag", :b=>"auf wiedersehen"}]
步驟如下:
str = greetings.gsub(/(\p{Alnum})+:/, '"\1":')
#=> "[{\"a\": \"hello\", \"b\": \"goodbye\"}, {\"a\": \"guten tag\", \"b\": \"auf wiedersehen\"}]\n"
arr = JSON.parse(str)
#=> [{"a"=>"hello", "b"=>"goodbye"},
# {"a"=>"guten tag", "b"=>"auf wiedersehen"}]
arr.map { |h| h.transform_keys(&:to_sym) }
#=> [{:a=>"hello", :b=>"goodbye"},
# {:a=>"guten tag", :b=>"auf wiedersehen"}]
正則表達式顯示為“匹配捕獲組 1 中的一個或多個字母數字字符,后跟一個冒號”。 gsub
的替換字符串中的\\1
被替換為捕獲組 1 的內容。
如果您信任來源(並且僅當您信任來源時,這可能不是真的):
data = eval(str)
如果您不這樣做(應該接近 100% 的情況),那么您可以使用parsr
gem
data = Parsr.literal_eval(str)
您也可以編寫自己的語法,但是...為什么? :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.