我正在尝试从此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
答案 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
,以避免破坏后续代码。
希望这会有所帮助-让我知道您的生活状况或有任何疑问:)