这是我昨天提出的问题的补充,但认为这是一个新问题。
我正在接受JSON响应并希望每次迭代提取所有值并将它们放入数组中
@response = { "0"=>{"forename_1"=>"John", "surname_1"=>"Smith", forename_2"=>"Josephine", "surname_2"=>"Bradley", "middle_1"=>""},
"1"=>{"forename_1"=>"Chris", "surname_1"=>"Jenkins", forename_2"=>"Christine", "surname_2"=>"Sugar", "middle_1"=>""},
"2"=>{"forename_1"=>"Billy", "surname_1"=>"Bob", forename_2"=>"Brenda", "surname_2"=>"Goodyear", "middle_1"=>""},
"Status" => 100
}
目前,此方法采用我想要的特定值并将它们放入我想要的数组中。
col = @response.values.grep(Hash).map { |h| "#{h['forename_1']} #{h['surname_1']} #{h['forename_2']} #{h['surname_2']} #{h['middle_1']}" }
有没有办法说抓住所有值并将它们放入一个数组(我有一个响应,其中返回超过25个键/值对)。
如果middle_1
没有值,那么" "
会被放入数组中,理想情况下我想删除它们。
理想情况下,我希望我新组建的数组看起来像
["John Smith Josephine Bradley", "Chris Jenkins Christine Sugar", "Billy Bob Brenda Goodyear"]
即使没有提供middle_1
,数组中也没有双重空格。我想学习如何解决这个问题。
答案 0 :(得分:1)
也许会提供"破解" hash
并提取您需要的内容:
h = {a1: "a", b2: "b", c3: "", d4: nil, e5: "e"}
values = h.values.map(&:to_s).reject(&:empty?)
# => ["a", "b", "e"]
values.join(" ")
# => "a b e"
让我们考虑h.values.map(&:to_s).reject(&:empty?)
:
values = h.values
# => ["a", "b", "", nil, "e"]
values = values.map(&:to_s)
# => ["a", "b", "", "" "e"]
values = values.reject(&:empty?)
# => ["a", "b", "e"]
希望能让您知道如何继续。
祝你好运!<强>更新强>
对于提供的hash
,您可以很容易地重复我上面描述的内容,如:
col = @response.values
.grep(Hash)
.map { |h| h.values.map(&:to_s).reject(&:empty?).join(" ") }
p col
# => ["John Smith Josephine Bradley", "Chris Jenkins Christine Sugar", "Billy Bob Brenda Goodyear"]