在 Ruby 字符串中查找哈希



我有一个看起来像这样的字符串:

greetings = <<-GREETINGS
[{a: "hello", b: "goodbye"}, {a: "guten tag", b: "auf wiedersehen"}]
GREETINGS

如何拆分此字符串,以返回哈希数组?

如果你信任源(并且仅当你信任源时,这可能不是真的(:

data = eval(str)

如果您不这样做(这种情况应该接近 100%(,那么您可以使用parsrgem

data = Parsr.literal_eval(str)

你也可以写自己的语法,但是...为什么?:)

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 的内容。

参见 JSON::p arse、String#gsub 和 Hash#transform_keys。

最新更新