无法从已解析的Ruby Hash中提取数据

时间:2019-09-23 10:06:10

标签: json ruby parsing hash extract

我正在尝试从此API响应中提取元素,但是由于某些原因,我无法这样做。我有以下API响应正文: `

[
  {
    "ID": "295699",
    "restriction": [
      {
        "restrictionTypeCode": "10001"
      }
    ]
  }
]

` 现在,我只想打印strictTypeTypeCode

  json_string = RestClient.get "#{$uri}", {:content_type => 'application/json'}
  hash = JSON.parse(json_string) 
  code= hash['restriction']['restrictionTypeCode']
  puts code

上面的代码出错,并且不显示strictionTypeCode

1 个答案:

答案 0 :(得分:3)

您的问题是您的数据在某些地方返回了数组。请尝试以下操作:

data = [
  {
    "ID": "295699",
    "restriction": [
      {
        "restrictionTypeCode": "10001"
      }
    ]
  }
]

data.first[:restriction].first[:restrictionTypeCode]
# to make this safe from any nil values you may encounter, you might want to use
data.first&.dig(:restriction)&.first&.dig(:restrictionTypeCode)
# => "10001"

# or 

data.flat_map { |hsh| hsh[:restriction]&.map { |sub_hsh| sub_hsh[:restrictionTypeCode] } }
# => ["10001"]

稍微分解一下,您的顶级响应和键:restriction下的响应都返回数组;因此,要从它们中获取数据,您需要访问它们包含的项之一(在我的示例中为first)或映射它们(第二个示例)。

我在那里添加了对nil值的一些检查:在处理API响应时,这非常重要,因为您无法控制数据,因此无法确定是否所有字段都会存在。遇到这样的数据时,您不会返回错误,而是会返回nil,以避免破坏后续代码。

希望这会有所帮助-让我知道您的生活状况或有任何疑问:)