JSON data not decoded in Rails

Hello all,

I’m trying to send some json data from the browser to the server using
prototype without success. On the server side ActiveSupport::JSON.decode
isn’t decoding the data.

Here is the code:

Javacript:
click

function send() { var send_data_url = "/pages/change"; var json_parameters = $H({name: 'Violet', occupation: 'character', age: 25 }).toJSON(); new Ajax.Request(send_data_url, { method: 'post', parameters: json_parameters, contentType: 'application/json;' }); } Rails: def change() debugger my_json = ActiveSupport::JSON.decode(params["_json"]) render :text => my_json end I've checked with the debugger that the json data that is sent to the server is the following: {"_json"=>"%7B%22name%22%3A%20%22Violet%22%2C%20%22occupation%22%3A%20%22charact er%22%2C%20%22age%22%3A%2025%7D", "action"=>"change", "controller"=>"pages"} Can anyone help me? Thanks. Best regards, Migrate

On Jul 5, 3:06 pm, Hu Ma [email protected] wrote:

Hello all,

I’m trying to send some json data from the browser to the server using
prototype without success. On the server side ActiveSupport::JSON.decode
isn’t decoding the data.

What happens ? render :text => my_json might produce some odd output
since you’re just calling to_s on a hash which doesn’t do anything
very interesting. render :text => my_json.inspect() would produce more
readable output

Fred

Hello Fred,

Thanks for the answer but the problem remains.

The “render :text => my_json” part is just a debug line I added.
I’m interested in manipulating the json data before sending an answer to
the browser.
I’ve done what you said but my_json.inspect() returns the same output.

From what I gathered the my_json is returned as a String object instead
of an Hash.

Example:
(rdb:5) my_json = ActiveSupport::JSON.decode(params[“_json”])
“%7B%22name%22%3A%20%22Violet%22%2C%20%22occupation%22%3A%20%22character%22%2C%2
0%22age%22%3A%2025%7D”
(rdb:5) my_json.class
String

If I use the same json string directly in the controller in Rails the
decode works so it must have something to do with the way I’m creating
the Ajax request, but I still don’t know what I’m doing wrong.

Example:
(rdb:5) my_json2 = ActiveSupport::JSON.decode(“{name: ‘Violet’,
occupation: ‘character’, age: 25 }”)
{“occupation”=>“character”, “name”=>“Violet”, “age”=>25}
(rdb:5) my_json2.class
Hash

Best regards,
Migrate

Frederick C. wrote:

On Jul 5, 3:06�pm, Hu Ma [email protected] wrote:

Hello all,

I’m trying to send some json data from the browser to the server using
prototype without success. On the server side ActiveSupport::JSON.decode
isn’t decoding the data.

What happens ? render :text => my_json might produce some odd output
since you’re just calling to_s on a hash which doesn’t do anything
very interesting. render :text => my_json.inspect() would produce more
readable output

Fred