我的响应字符串看起来像这样:
"[{\"id\":\"blahbla23sdlkjrwer2345\",\"name\":\"bar\"},{\"id\":\"aselrjdsfsomething\",\"name\":\"foo\"}]"
然后我使用JSON.parse(response_above)
:
json_parse = JSON.parse(response_above)
=>[{"id"=>"blahbla23sdlkjrwer2345", "name"=>"bar"},
{"id"=>"aselrjdsfsomething", "name"=>"foo"}]
从这里我只想要名字并将它们放入一个数组中。我想出了如何获取名称但不知道如何将其构建为新数组。
要获得“foo”或“bar”,我可以这样做:
json_parse[0].fetch("name")
=> "bar"
json_parse[1].fetch("name")
=> "foo"
我不知道如何遍历数组以从JSON响应构建新数组,如:
new_array = ["foo", "bar"]
JSON响应可以是动态的,有时我可能只有2个元素,有时我可以有10个元素。我无法对一个值进行硬编码。我需要找到一种方法来遍历该数组,以获取每个值的“name”键。
答案 0 :(得分:6)
以下是:
2.1.3 :006 > require 'json'
=> true
2.1.3 :007 > json = JSON.parse("[{\"id\":\"blahbla23sdlkjrwer2345\",\"name\":\"bar\"},{\"id\":\"aselrjdsfsomething\",\"name\":\"foo\"}]")
=> [{"id"=>"blahbla23sdlkjrwer2345", "name"=>"bar"}, {"id"=>"aselrjdsfsomething", "name"=>"foo"}]
2.1.3 :008 > json.map { |entry| entry['name'] }
=> ["bar", "foo"]
答案 1 :(得分:3)
与许多Ruby答案一样,有几种方法可以做到:
设置:
[1] pry(main)> require 'json'
=> true
[2] pry(main)> json = JSON.parse("[{\"id\":\"blahbla23sdlkjrwer2345\",\"name\":\"bar\"},{\"id\":\"aselrjdsfsomething\",\"name\":\"foo\"}]")
使用#inject
:
[5] pry(main)> json.inject([]) { |arr, entry| arr << entry['name'] ; arr }
=> ["bar", "foo"]
使用#map
作为Nerian指出:
[6] pry(main)> json.map { |entry| entry['name'] }
=> ["bar", "foo"]
使用#collect
:
[7] pry(main)> json.collect { |entry| entry['name'] }
=> ["bar", "foo"]
关于这个主题的一些有趣的基准。我创建了一个包含一百万个哈希的数组,并在其上调用了上面的3个方法。 #collect
似乎是最快的,尽管测试在不同的运行中有所不同。
user system total real
map 0.300000 0.020000 0.320000 ( 0.325673)
collect 0.260000 0.030000 0.290000 ( 0.285001)
inject 0.430000 0.010000 0.440000 ( 0.446080)