Reputation: 11747
I have a ruby application and I need to receive a JSON from a client. Receiving a JSON is just like receiving a string? I just have to do something like:
information = params[:json_data]
data_parsed = JSON.parse(information)
That's all or I have to do something different when getting a JSON? The sender has to send me that like string?
Thanks!
Upvotes: 7
Views: 25561
Reputation: 1333
The official document says,
If the "Content-Type" header of your request is set to "application/json", Rails will automatically load your parameters into the params hash, which you can access as you would normally.
So for example, if you are sending this JSON content:
{ "company": { "name": "acme", "address": "123 Carrot Street" } }
Your controller will receive
params[:company]
as{ "name" => "acme", "address" => "123 Carrot Street" }
.Also, if you've turned on
config.wrap_parameters
in your initializer or calledwrap_parameters
in your controller, you can safely omit the root element in the JSON parameter. In this case, the parameters will be cloned and wrapped with a key chosen based on your controller's name. So the above JSON POST can be written as:{ "name": "acme", "address": "123 Carrot Street" }
And, assuming that you're sending the data to CompaniesController, it would then be wrapped within the
:company
key like this:{ name: "acme", address: "123 Carrot Street", company: { name: "acme", address: "123 Carrot Street" } }
So, if you send/POST { "hello": "world"}
to apples/
, then
params['apple']
will be the object for the Json payload.
class ApplesController < ApplicationController
def create
# params['apple'] is the object represents Json payload
end
end
Upvotes: 17
Reputation: 17790
What you are describing is OK, but it implies that there is a param named json_data
. If you instead mean that the entire POST
body is nothing but the JSON
, then you want to look at request.raw_post
. You'd end up with something like this:
information = request.raw_post
data_parsed = JSON.parse(information)
Upvotes: 28