How to handle json data request?

87 views
Skip to first unread message

Chamnap

unread,
Apr 2, 2009, 3:40:19 AM4/2/09
to Ruby on Rails: Talk
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.

Rob Biedenharn

unread,
Apr 2, 2009, 4:18:11 AM4/2/09
to rubyonra...@googlegroups.com


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
R...@AgileConsultingLLC.com

Chamnap

unread,
Apr 2, 2009, 9:27:00 PM4/2/09
to Ruby on Rails: Talk


On Apr 2, 3:18 pm, Rob Biedenharn <R...@AgileConsultingLLC.com> wrote:
>
> 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

Rob Biedenharn

unread,
Apr 3, 2009, 8:38:03 AM4/3/09
to rubyonra...@googlegroups.com

irb> require 'rubygems'
=> true
irb> gem 'json'
=> true
irb> require 'json'
=> true
irb> raw = "{\"first_name\":\"chamnap\",\"last_name\":\"chhorn\"}"
=> "{\"first_name\":\"chamnap\",\"last_name\":\"chhorn\"}"
irb> puts raw
{"first_name":"chamnap","last_name":"chhorn"}
=> nil
irb> JSON(raw)
=> {"first_name"=>"chamnap", "last_name"=>"chhorn"}
irb> cooked = JSON.parse(raw)
=> {"first_name"=>"chamnap", "last_name"=>"chhorn"}
irb> raw
=> "{\"first_name\":\"chamnap\",\"last_name\":\"chhorn\"}"
irb> cooked
=> {"first_name"=>"chamnap", "last_name"=>"chhorn"}
irb> raw.class
=> String
irb> cooked.class
=> Hash
irb> cooked["first_name"]
=> "chamnap"
irb> 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.

Chamnap

unread,
Apr 4, 2009, 11:53:50 PM4/4/09
to Ruby on Rails: Talk
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
Reply all
Reply to author
Forward
0 new messages