How to handle json data request?

I have searched in this group for a while, and it seems no one face
the same problem like me yet. I am developing a rest web service(post
method) that requires json data format from my javascript client
application. I don't know how to handle since I could not get data
that is being sent. In my controller, params variable got messed with
key and value. I want to know the way how to parse data from this to
ruby object. Any idea is really appreciated.

Get the JSON gem for starters.

   sudo gem install json

Then in your code:
   require 'rubygems'
   gem 'json'
   require 'json'

-Rob

Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com

I have followed what you said, but still doesn't work. The params
variable still contains weird string like: {"{\"first_name\":\"chamnap
\",\"last_name\":\"chhorn\"}"=>nil, "action"=>"create",
"controller"=>"users"}. Therefore, I could not access through either
params[:first_name] or params[:last_name].

Chamnap

Get the JSON gem for starters.

   sudo gem install json

Then in your code:
   require 'rubygems'
   gem 'json'
   require 'json'

I have followed what you said, but still doesn't work. The params
variable still contains weird string like: {"{\"first_name\":\"chamnap
\",\"last_name\":\"chhorn\"}"=>nil, "action"=>"create",
"controller"=>"users"}. Therefore, I could not access through either
params[:first_name] or params[:last_name].

Chamnap

require 'rubygems'

=> true

gem 'json'

=> true

require 'json'

=> true

raw = "{\"first_name\":\"chamnap\",\"last_name\":\"chhorn\"}"

=> "{\"first_name\":\"chamnap\",\"last_name\":\"chhorn\"}"

puts raw

{"first_name":"chamnap","last_name":"chhorn"}
=> nil

JSON(raw)

=> {"first_name"=>"chamnap", "last_name"=>"chhorn"}

cooked = JSON.parse(raw)

=> {"first_name"=>"chamnap", "last_name"=>"chhorn"}

raw

=> "{\"first_name\":\"chamnap\",\"last_name\":\"chhorn\"}"

cooked

=> {"first_name"=>"chamnap", "last_name"=>"chhorn"}

raw.class

=> String

cooked.class

=> Hash

cooked["first_name"]

=> "chamnap"

cooked[:first_name]

=> nil

Note that JSON.parse is going to return a normal Ruby Hash, not a Rails ActiveSupport HashWithIndifferentAccess. You'll have to use "first_name" as the key, not :first_name. Show the code that you're trying to use that's pulling that whole string into a key of the params hash.

-Rob

Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com

Thanks

I also have founded a method in ActiveSupport::JSON.decode, and it
does work the same thing as you did show me. What do you think?

Chamnap