我正在从应用程序API解析一个非常大的json输出,最后得到一个类似于以下消毒版本的ruby数组:
{"log_entries"=>
[{"id=>"SDF888B2B2KAZZ0AGGB200",
"type"=>"warning",
"summary"=>"Things happened",
"created"=>"2017-07-11T18:40:31Z",
"person"=>
{"id"=>"44bAN8",
"name"=>"Harry"}
"system"=>"local",
"service"=>"syslog"
{"id=>"HMB001NBALLB81MMLLABLK",
"type"=>"info",
"summary"=>"Notice",
"created"=>"2017-06-02T11:23:21Z",
"person"=>
{"id"=>"372z1j",
"name"=>"Sally"}
"system"=>"local",
"service"=>"syslog"}]},
"other"=>200,
"set"=>0,
"more"=>false,
"total"=nil}
我只需要能够在第一个块中打印“created”键的值。这意味着,当程序退出时,我需要打印“2017-07-11T18:40:31Z”。我已经google了很多但是没有成功找到任何东西。我尝试过类似的东西:
puts ["log_entries"]["id"]["created"]
我的期望是打印所有这些在某处,甚至会产生错误。原谅我,我不太使用红宝石。
答案 0 :(得分:1)
由于log_entries
是一个数组,您只需访问第一个元素并获取其created
值。
假设变量result
包含整个哈希值(您从API解析的JSON):
puts result['log_entries'][0]['created']
将打印出第一个日期。现在您可能希望在log_entries
为空的情况下保护它,因此将其包装在if
中:
if result['log_entries'].any?
puts result['log_entries'][0]['created']
end
答案 1 :(得分:0)
您的json格式不正确。但假设你有正确的格式,以下应该工作
result["log_entries"].collect{|entry| entry["created"]}
=> ["2017-07-11T18:40:31Z", "2017-06-02T11:23:21Z"]
以上代码将收集所有创建日期并为您提供数组