rick
rick

Reputation: 1115

ruby parse HTTParty array - json

Still new to Ruby - I apologize in advance if this has been asked.

I am using HTTParty to get data from an API, and it is returning an array of JSON data that I can't quite figure out how to parse.

#<Net::HTTPOK:0x1017fb8c0>
{"ERRORARRAY":[],"DATA":[{"ALERT":1,"LABEL":"hello","WATCHDOG":1},{"LABEL":"goodbye","WATCHDOG":1}

I guess the first question is that I don't really know what I am looking at. When I do response.class I get HTTParty::Response. It appears to be a Hash inside an array? I am not sure. Anyway, I want a way to just grab the "LABEL" for every separate array, so the result would be "hello", "goodbye". How would I go about doing so?

Upvotes: 0

Views: 2548

Answers (3)

RTIndy
RTIndy

Reputation: 148

If you're struggling with the json gem, consider using the Crack gem. It has the added benefit of also parsing xml.

require 'crack'
my_hash_array = Crack::JSON.parse(my_json_string)

my_hash_array = Crack::XML.parse(my_xml_string)

Upvotes: 0

HR&#211;&#208;&#211;LFR
HR&#211;&#208;&#211;LFR

Reputation: 5982

you don't need to parse it per say. what you could do is replace ':' with '=>' and evaluate it.

example: say you have ["one":"a","two":"b"], you could set s to equal that string and do eval s.gsub(/^\[/, '{').gsub(/\]$/, '}').gsub('":', '"=>') will yield a ruby hash (with inspect showing {"one"=>"a", "two"=>"b"})

alternatively, you could do something like this

require 'json'

string_to_parse = "{\"one\":\"a\",\"two\":\"b\"}"

parsed_and_a_hash = JSON.parse(string_to_parse)

parsed_and_a_hash is a hash!

Upvotes: 1

Andy
Andy

Reputation: 1490

If that's JSON, then your best bet is to install a library that handles the JSON format. There's really no point in reinventing the wheel (although it is fun). Have a look at this article.

If you know that the JSON data will always, always be in exactly the same format, then you might manage something relatively simple without a JSON gem. But I'm not sure that it's worth the hassle.

Upvotes: 0

Related Questions