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