如何访问JSON数组数据?

时间:2014-09-08 15:24:59

标签: ruby arrays json

我有以下数组:

[ { "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。

3 个答案:

答案 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)

使用Rails的JSON库非常慢......

我更喜欢使用:

gem 'oj'

来自https://github.com/ohler55/oj

快速而简单!让我们开始吧!