【问题标题】:How do I access JSON array data?如何访问 JSON 数组数据?
【发布时间】:2014-11-01 21:00:47
【问题描述】:

我有以下数组:

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

【问题讨论】:

  • 看起来像 JSON 数组,而不是 Ruby 数组...
  • @Jordan - 正确。很抱歉造成混乱
  • 除非您将键转换为符号,否则 JSON 结构是字符串且仅用于键的字符串。

标签: ruby arrays json


【解决方案1】:

JSON 库什么用 Rails 很慢...

我更喜欢使用:

gem 'oj'

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

快速简单!走吧!

【讨论】:

    【解决方案2】:

    我将假设数据是 JSON,您正在(使用 JSON.parse)将其解析为 Ruby 哈希数组,如下所示:

    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" ]
    

    【讨论】:

      【解决方案3】:

      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 方法进行访问。

      【讨论】:

        猜你喜欢
        • 2016-12-02
        • 1970-01-01
        • 2020-11-25
        • 2023-02-04
        • 2019-11-16
        • 1970-01-01
        • 2021-10-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多