我从 API 获取 JSON 响应,并使用
JSON.parse()
进行解析。我的代码中有一个循环,每次迭代时都会检查 JSON 响应中的某个参数是否等于定义的字符串。这是我收到的 JSON 响应的简单版本:
{
"response": [
{
"data": {
"parameter": "value"
}
},
{
"data": {
"parameter": "value2"
}
},
{
"data": {
"parameter2": "value"
}
}
]
}
如您所见,只有
response[0]
和 response[1]
包含 parameter
。 response[2]
有parameter2
。
所以如果我循环遍历它:
while i < responses.size
response = responses[i]
if(response.data.parameter == "value")
*do something*
end
end
当我进行第三次迭代时,我会得到
Unhandled exception: Missing hash key: "parameter"
。我可以忽略或者更好地防止错误发生吗?
提前谢谢您!
如果您正确地将数据读取为哈希值的哈希值,则可以使用
has_key?
过滤掉无效响应。以下示例代码对我有用:
responses = {
"response" => [
{
"data" => {
"parameter" => "value",
},
},
{
"data" => {
"parameter" => "value2",
},
},
{
"data" => {
"parameter2" => "value",
},
},
],
}
pp responses
responses["response"].each do |response|
if response["data"].has_key?("parameter")
pp response
valid_response = response["data"]
if valid_response["parameter"] == "value"
puts "Doing something..."
end
end
end
并产生以下输出:
{"response" =>
[{"data" => {"parameter" => "value"}},
{"data" => {"parameter" => "value2"}},
{"data" => {"parameter2" => "value"}}]}
{"data" => {"parameter" => "value"}}
Doing something...
{"data" => {"parameter" => "value2"}}