Convert json string to hash and retrieve hash items values in ruby

Hi,

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",
         "item":

“{“business”:“1114”,“class”:“Demo”,“date”:“01-01-2014”,“version”:”",“data”:“dummy”,“name”:“Finance”}"

    }

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
{"guid"=>"4c9f83e4-f479-48d0-9f92-3fff70a8f6ba",

“item”=>"{“business”:“1114”,“class”:“Demo”,“date”:“01-01-2014”,“version”:"",“data”:“dummy”,“name”:“Finance”}"}

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.

My first post here

Nice answer.

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’] ) )

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs