簡體   English   中英

在 Ruby 字符串中查找哈希值

[英]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 的內容。

請參閱JSON::parseString#gsubHash#transform_keys

如果您信任來源(並且當您信任來源時,這可能不是真的):

data = eval(str)

如果您不這樣做(應該接近 100% 的情況),那么您可以使用parsr gem

data = Parsr.literal_eval(str)

您也可以編寫自己的語法,但是...為什么? :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM