Forum: Ruby on Rails How to handle json data request?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
7ac5c5f592bde31406227f5cad0af31b?d=identicon&s=25 Chamnap (Guest)
on 2009-04-02 09:41
(Received via mailing list)
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.
Ef3aa7f7e577ea8cd620462724ddf73b?d=identicon&s=25 Rob Biedenharn (Guest)
on 2009-04-02 10:19
(Received via mailing list)
On Apr 2, 2009, at 3:40 AM, Chamnap wrote:
> 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
7ac5c5f592bde31406227f5cad0af31b?d=identicon&s=25 Chamnap (Guest)
on 2009-04-03 03:28
(Received via mailing list)
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
Ef3aa7f7e577ea8cd620462724ddf73b?d=identicon&s=25 Rob Biedenharn (Guest)
on 2009-04-03 14:39
(Received via mailing list)
On Apr 2, 2009, at 9:27 PM, Chamnap wrote:

>>    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

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.

-Rob

Rob Biedenharn    http://agileconsultingllc.com
Rob@AgileConsultingLLC.com
7ac5c5f592bde31406227f5cad0af31b?d=identicon&s=25 Chamnap (Guest)
on 2009-04-05 05:54
(Received via mailing list)
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
This topic is locked and can not be replied to.