Ruby从json

时间:2017-07-11 20:26:41

标签: ruby

我正在从应用程序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"] 

我的期望是打印所有这些在某处,甚至会产生错误。原谅我,我不太使用红宝石。

2 个答案:

答案 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"]

以上代码将收集所有创建日期并为您提供数组