-1

我正在收集 HTTP 响应,它以 text/json 形式返回。原始格式如下:

{"param" => "value", "interesting_param" => [{"parama1"=>vala1,"parama2"=>vala2,"parama3"=>vala3,"parama4"=>vala4,"parama5"=>vala5},
{"paramb1"=>valb1,"paramb2"=>valb2,"paramb3"=>valb3,"paramb4"=>valb4,"paramb5"=>valb5}]}

当我执行 JSON.parse(response.body)["interesting_param"] 时,我可以检索到这个输出:

{"parama1"=>vala1,"parama2"=>vala2,"parama3"=>vala3,"parama4"=>vala4,"parama5"=>vala5},
{"paramb1"=>valb1,"paramb2"=>valb2,"paramb3"=>valb3,"paramb4"=>valb4,"paramb5"=>valb5}

如何从上面的完整结果集中仅捕获以下内容。

`parama1-vala1`, `parama2-vala2` and `parama5-vala5`
`paramb1-valb1`, `paramb2-valb2` and `paramb5-valb5`

更新 我确实对此做了进一步的尝试,现在我正在考虑使用循环。我试图这样做的方式是:

  1. 查找记录数,例如,如果:

测试 = {"parama1"=>vala1,"parama2"=>vala2,"parama3"=>vala3,"parama4"=>vala4,"parama5"=>vala5}, {"paramb1"=>valb1,"paramb2" =>valb2,"paramb3"=>valb3,"paramb4"=>valb4,"paramb5"=>valb5}

然后,test.count将是2

现在,如果我能以某种方式使用循环来遍历 中的元素test,那么我也许能够捕获特定元素。

谢谢。

4

1 回答 1

1

看起来您希望将每个哈希映射到一个字符串列表,该列表通过将键的字符串版本与值的字符串版本连接起来,并用“-”连接。

JSON.parse(response.body)["interesting_param"]

上面的代码应该给你一个红宝石哈希列表。

interesting_bits = JSON.parse(response.body)["interesting_param"]
result = interesting_bits.map{|bit| bit.map{|k,v| "#{k}-#{v}"}}

像这样的东西应该可以解决问题。

puts result.inspect
#prints 
# [ ["parama1-vala1","parama2-vala2","parama3-vala3","parama4-vala4","parama5-vala5"] , ["paramb1-valb1","paramb2-valb2","paramb3-valb3","paramb4-valb4","paramb5-valb5"] ]

我不明白您使用什么标准,然后将其过滤到仅 1,2 和 5 ......但这也很容易做到。在将它们转换为字符串列表之前,我会对散列执行此操作。

于 2013-07-24T22:25:08.887 回答