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