Forum: Ruby convert json string to hash and retrieve hash items values in ruby

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
54569182ca70ea857943ecbbb82c2864?d=identicon&s=25 ruby r. (rubyonrails)
on 2014-05-08 17:52

I have a string object which is basically in a json format and while
trying to print it shows in console as

    item =
          "id": "4c9f83e4-f479-48d0-9f92-3fff70a8f6ba",


I need to get the values of business, class, date etc and pass it as
params to my method. So I tried to convert it into hashes as below

    hash_item = JSON.parse (item)

and output in console shows as

    The converted hash item is

But when I try to access the hash value for business as
`hash_item['item']['business']` it shows

> "business"

 since the value of item is a String in the hash_item. I am not sure
whether my approach is correct or not. So is there any better idea or
any inputs to retrieve the hash values . Please help.
3fafddcf7a192d16c88863c6e650a62b?d=identicon&s=25 Carl S. (lowest0ne)
on 2014-05-09 00:43
My first post here, sorry about formating ( or lack there of ).

"item": "{"business":"111 ... ... ;}"

You get "business" because the value of item['item'] is a string.  The
[] operator on a string returns the enclosed string if that substring
exists in the string:

my_string = "Hello World"
my_string[ "llo" ] => "llo"

So that is the first issue, that string needs to have a JSON.parse
called on it.  However, it is also escaped.  I'm not sure that the
JSON.parse with unescape it for you, but CGI will:

require 'cgi'

string = ""business":"
CGI.unescapeHTML( string ) => "\"business\":"

So, you want something like:

parsed = JSON.parse( original )
parsed['item'] = JSON.parse( CGI.unescapeHTMl( parsed['item'] ) )
5989a003d261c0abe6d08570ff6cc3d0?d=identicon&s=25 7stud -. (7stud)
on 2014-05-09 06:17
> My first post here

Nice answer.
This topic is locked and can not be replied to.