Mike D
Mike D

Reputation: 365

Ruby extract single key value from first block in json

I'm parsing a very large json output from an application API and end up with a ruby array similar to the sanitized version below:

{"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}

I just need to be able to print the value of the "created" key only in the first block. Meaning, when the program exits, I need it to print "2017-07-11T18:40:31Z." I've googled a lot but wasn't successful in finding anything. I've tried something like:

puts ["log_entries"]["id"]["created"] 

My expectation was to print all of them to start somewhere and even that yields an error. Forgive me, I don't use ruby much.

Upvotes: 0

Views: 498

Answers (2)

Pascal
Pascal

Reputation: 8646

Since log_entries is an array you can just access the first element and get its created value.

Assuming the variable result holds the whole hash (the JSON you parse from the API):

puts result['log_entries'][0]['created']

will print out the first date. Now you might want to guard that for cases where log_entries empty, so wrap it in a if:

if result['log_entries'].any?
  puts result['log_entries'][0]['created']
end

Upvotes: 1

usha
usha

Reputation: 29369

Your json is not in valid format. But assuming you have the right format, following should work

result["log_entries"].collect{|entry| entry["created"]}
=> ["2017-07-11T18:40:31Z", "2017-06-02T11:23:21Z"]

Above code will collect all the created date and give you an array

Upvotes: 0

Related Questions