Ruby - 忽略空 JSON 响应?
Ruby - ignore empty JSON response?
假设我有以下 JSON 回复:
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
有时我也会这样:
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "0"
}
}
}
现在,我想访问上面的 JSON 响应,如:
obj_json = JSON.parse(message.payload)
json_id = (obj_json['glossary']['GlossDiv']['GlossEntry']['ID'])
puts json_id
但是每当我得到底部的响应时,我都会收到以下错误:
undefined method `[]' for nil:NilClass (NoMethodError)
我怎么能忽略后面的回复呢?我可能只是想得太复杂了。
谢谢!
添加条件以检查 GlossEntry 是否存在 json_id = obj_json['glossary']['GlossDiv']['GlossList']['GlossEntry'] ? obj_json['glossary']['GlossDiv']['GlossList']['GlossEntry']['ID'] : ''
ruby 有一个 method called dig
可以为您检查是否存在。
obj_json = JSON.parse(message.payload)
json_id = obj_json.dig('glossary', 'GlossDiv', 'GlossEntry', 'ID')
puts json_id
这将继续进入 JSON 直到它 returns 请求的值或 returns nil 如果任何键不存在。
假设我有以下 JSON 回复:
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
有时我也会这样:
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "0"
}
}
}
现在,我想访问上面的 JSON 响应,如:
obj_json = JSON.parse(message.payload)
json_id = (obj_json['glossary']['GlossDiv']['GlossEntry']['ID'])
puts json_id
但是每当我得到底部的响应时,我都会收到以下错误:
undefined method `[]' for nil:NilClass (NoMethodError)
我怎么能忽略后面的回复呢?我可能只是想得太复杂了。
谢谢!
添加条件以检查 GlossEntry 是否存在 json_id = obj_json['glossary']['GlossDiv']['GlossList']['GlossEntry'] ? obj_json['glossary']['GlossDiv']['GlossList']['GlossEntry']['ID'] : ''
ruby 有一个 method called dig
可以为您检查是否存在。
obj_json = JSON.parse(message.payload)
json_id = obj_json.dig('glossary', 'GlossDiv', 'GlossEntry', 'ID')
puts json_id
这将继续进入 JSON 直到它 returns 请求的值或 returns nil 如果任何键不存在。