当我调用国家/地区列表时,我从 API 中获取以下数组作为 JSON:
{
"countries": [
[
"Andorra",
"AD"
],
[
"United Arab Emirates",
"AE"
],
[
"Afghanistan",
"AF"
],
[
"Antigua and Barbuda",
"AG"
],
[
"Anguilla",
"AI"
],
[
"Albania",
"AL"
],
[
"Armenia",
"AM"
]]}
这是我的控制器:
def find_countries
@countries = CountryStateSelect.countries_collection
render :json=>{ :countries=> @countries }
end
我想像这样分隔这个国家/地区列表数组。
{
"countries": [
[
value:"Andorra",
key: "AD"
],
[
value: "United Arab Emirates",
key:"AE"
],
[
value: "Afghanistan",
key:"AF"
],
[
value:"Antigua and Barbuda",
key:"AG"
]
]}
我无法识别值和键。如何按上述方式分离此 JSON 响应?
您需要
将每个项目映射到一个对象中
@countries = CountryStateSelect.countries_collection.map do |name, code|
Hash[:key, code, :value, name]
end
只需将数组转换为哈希值:
h = _ # your input data given
h[:countries].map!{|a| {value: a[0], key: a[1]} }
input = {
"countries": [
["Andorra", "AD"],
["United Arab Emirates", "AE"]
]
}
input.
transform_values do |vals|
vals.map(&%i[value key].method(:zip)).map(&:to_h)
end
#⇒ {
# :countries => [
# [0] {
# :key => "AD",
# :value => "Andorra"
# },
# [1] {
# :key => "AE",
# :value => "United Arab Emirates"
# }
# ]
# }
使用 collect 方法:
countries = CountryStateSelect.countries_collection.collect do |country, code|
{ key: code, value: country }
end