有没有办法在json结构的键上进行正则表达式查询?

时间:2013-05-09 16:50:14

标签: ruby json

我说我有一个json结构列表,例如

  

{ "S1" => "foo", "R2" => "bar", "S2" => "baz" }

我希望得到“S *”键的数据,

你会如何在红宝石中做到这一点?有没有办法执行这样的任务?

谢谢,

2 个答案:

答案 0 :(得分:5)

使用select挑选出您想要的键/值对:

{ "S1" => "foo", "R2" => "bar", "S2" => "baz" }.select{|k,v| k =~ /^S/}

结果是所需的哈希 - 如果您使用的是Ruby 1.9 / 2.0。但是,在Ruby 1.8中,这将返回一个数组数组 - 您可以使用Hash[]将其包装回来将其转换为哈希:

start = { "S1" => "foo", "R2" => "bar", "S2" => "baz" }
Hash[start.select{|k,v| k =~ /^S/}]

答案 1 :(得分:3)

假设您已经将json解析为hash,可以这样做:

{ "S1" => "foo", "R2" => "bar", "S2" => "baz" }.select {|k,v| k.match /^S.*/}

如果这仍然是json,则必须先使用JSON.parse。

require "json"
JSON.parse(your_json)