处理使用JSON返回的null值

时间:2016-11-08 07:16:45

标签: json ruby linux

我正在运行ruby 1.9。我有这个代码从这两个bank = total &提取StatusState的值。 /usr/sbin/storcli /c0/bbu show j命令。

/usr/sbin/storcli /c0/cv show j

问题

两个命令#!/usr/bin/ruby require 'json' output_bbu = %x{/usr/sbin/storcli /c0/bbu show j} output_cv = %x{/usr/sbin/storcli /c0/cv show j} begin j = JSON.parse(output_bbu) k = JSON.parse(output_cv) result = j["Controllers"][0]["Command Status"]["Status"] ### I'm not sure how to get the value of "State" and store it in "status" variable. status = k["Controllers"][0]["Response Data"]["Cachevault_Info"][0]["State"] status = j["Controllers"][0]["Response Data"]["BBU_Info"][0]["State"] ### rescue Exception => e puts "CRITICAL: error reading BBU status: #{e}" exit 2 end if result != 'Success' puts "CRITICAL: command not successful, result: #{result}" exit 2 end storcli /c0/cv show j中的一个在“status”变量中返回空值,脚本失败并显示错误

  

未定义的方法`[]'为nil:NilClass

storcli /c0/bbu show j可以返回“State”的nil值,或者storcli /c0/cv show j可以返回nil。所以我想要做的是将“State”的值存储在变量“status”中。

命令输出示例

storcli /c0/bbu show j

看,这里它将“State”的值返回为“Optimal”,所以我想将它的值存储在变量“status”中。

nil的样本输出,

$ storcli /c0/cv show j

{
"Controllers":[
{
        "Command Status" : {
                "Controller" : 0,
                "Status" : "Success",
                "Description" : "None"
        },
        "Response Data" : {
                "Cachevault_Info" : [
                        {
                                "Model" : "CVPM02",
                                "State" : "Optimal",
                                "Temp" : "35C",
                                "Mode" : "-",
                                "MfgDate" : "2013/09/17"
                        }
                ]
        }
}
]
}

1 个答案:

答案 0 :(得分:1)

因为您没有获得“响应数据”#34;从一个命令,您可以使用以下

status = k["Controllers"][0]
           .fetch(["Response Data"], {})
           .fetch(["Cachevault_Info"], {})
           .fetch([0], {})["Status"]
status ||= j["Controllers"][0]["Response Data"]["BBU_Info"][0]["State"]

使用||=,如果status = k的结果为nil,则会设置status = j