我有以下数组:
[ { "attributes": {
"id": "usdeur",
"code": 4
},
"name": "USD/EUR"
},
{ "attributes": {
"id": "eurgbp",
"code": 5
},
"name": "EUR/GBP"
}
]
如何将两个ID作为输出进行进一步处理?
我尝试了很多但没有成功。我的问题是我总是只得到一个id作为输出:
Market.all.select.each do |market|
present market.id
end
或者:
Market.all.each{|attributes| present attributes[:id]}
只给了我" eurgbp"因此,我需要两个ID。
答案 0 :(得分:2)
JSON#parse
可以帮助您解决此问题
require 'json'
json = '[ { "attributes": {
"id": "usdeur",
"code": 4
},
"name": "USD/EUR"
},
{ "attributes": {
"id": "eurgbp",
"code": 5
},
"name": "EUR/GBP"
}]'
ids = JSON.parse(json).map{|hash| hash['attributes']['id'] }
#=> ["usdeur", "eurgbp"]
JSON#parse
将jSON响应转换为Hash
,然后只使用标准Hash
方法进行访问。
答案 1 :(得分:0)
我将假设数据是您正在解析(使用JSON.parse
)到Ruby数组中的JSON,如下所示:
hashes = [ { "attributes" => { "id" => "usdeur", "code" => 4 },
"name" => "USD/EUR"
},
{ "attributes" => { "id" => "eurgbp", "code" => 5 },
"name" => "EUR/GBP"
} ]
如果您想获得第一个"id"
值,请执行以下操作:
first_hash = hashes[0]
first_hash_attributes = first_hash["attributes"]
p first_hash_attributes["id"]
# => "usdeur"
或者只是:
p hashes[0]["attributes"]["id"]
# => "usdeur"
为了得到它们,你将会这样做:
all_attributes = hashes.map {|hash| hash["attributes"] }
# => [ { "id" => "usdeur", "code" => 4 },
# { "id" => "eurgbp", "code" => 5 } ]
all_ids = all_attributes.map {|attrs| attrs["id"] }
# => [ "usdeur", "eurgbp" ]
或者只是:
p hashes.map {|hash| hash["attributes"]["id"] }
# => [ "usdeur", "eurgbp" ]
答案 2 :(得分:0)