gpt4 book ai didi

ruby - 我如何有选择地迭代这个散列?

转载 作者:数据小太阳 更新时间:2023-10-29 09:03:38 25 4
gpt4 key购买 nike

{
"menu": {
"header": "menu",
"items": [
{"id": 27},
{"id": 0, "label": "Label 0"},
null,
{"id": 93},
{"id": 85},
{"id": 54},
null,
{"id": 46, "label": "Label 46"}
]
}
}

以上是我尝试遍历的 JSON。本质上,如果该散列也有一个 "label" 键,我想确定键 "id" 的值。

所以上面的代码也会返回 046

我被困在这里了:

require 'json'

line = '{"menu": {"header": "menu", "items": [{"id": 27}, {"id": 0, "label": "Label 0"}, null, {"id": 93}, {"id": 85}, {"id": 54}, null, {"id": 46, "label": "Label 46"}]}}'
my_parse = JSON.parse(line)
items = my_parse['menu']['items'].compact.select { |item| item['label'] }

puts items.inject

最佳答案

使用Array#select识别同时具有“id”和“label”的元素然后Array#map只摘取“ids”。

hash = JSON.parse(your_json_string)
hash['menu']['items'].select { |h| h && h['id'] && h['label'] }.map {|h| h['id']}
# => [0, 46]

一个更干净的版本可能是这样的

def ids_with_label(json_str)
hash = JSON.parse(json_str)
items = hash['menu']['items']
items_with_label = items.select { |h| h && h.include?('id') && h.include?('label') }
ids = items_with_label.map { |h| h['id'] }
ids
end

ids_with_label(your_json_string) # => [0, 46]

关于ruby - 我如何有选择地迭代这个散列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29283586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com