Skip to content Skip to sidebar Skip to footer

Ruby - Parsing JSON Coming Via URL

I'm sending a JSON object to ruby with javascript. But I cannot parse it in there. I tried following stuff but no luck. Also I've been searching around for while now, but I couldn'

Solution 1:

Here an example of parsing a JSON string. If you still have problems, publish the generated JSON so that we can try it.

require 'json'
require 'ap'

string = %{
  {"configurations" : [ 
  { "drinks" : [
          {"menus" : [
            { "hot" : [
              {"id":15,"unit":"0.33", "price":"1", "currency":"Euro", "position": 4},
              {"id":15,"unit":"0.33", "price":"1", "currency":"Euro", "position": 6}
            ] },

            { "cold" : [
          {"id":15,"unit":"0.33", "price":"1", "currency":"Euro", "position": 4},
              {"id":15,"unit":"0.33", "price":"1", "currency":"Euro", "position": 6}
             ] },

            { "terminals" : { "id" : 4, "id": 6, "id": 7 } }, 

            { "keys" : { "debit" : "on", "credit": "off" }  }

          ] }
  ] } ] } 
}

hash = JSON.parse(string)
ap hash

gives

{
    "configurations" => [
        [0] {
            "drinks" => [
                [0] {
                    "menus" => [
                        [0] {
                            "hot" => [
                                [0] {
                                          "id" => 15,
                                        "unit" => "0.33",
                                       "price" => "1",
                                    "currency" => "Euro",
                                    "position" => 4
                                },

etc..


Solution 2:

At the moment you're not actually posting json. You're attemping to post json wrapped inside form encoded parameters. In addition, when you do

"conf=" + json_of_form_vars

javascript will convert json_of_form_vars to a string for you but that conversion isn't the same as dumping to JSON. Javascript default string conversions are pretty useless for objects, so you'll need to use JSON.stringify to get actual json.

Since you're composing the body as a string literal you'll also need to escape any special characters that aren't allowed (or have special meaning) in this context. It's usually easier to let jquery do the heavy lifting, with something like

$.ajax({
    url: "../fundament/dispatch.rb/",
    type: "post",
    dataType: "json",
    data: {conf: JSON.stringify(json_of_form_vars)}

Solution 3:

I solved it finally. Using all the suggestions made under this post and also my irb experiences with hashes, arrays, json and etc.

So instead of converting my object (conf_json) to json (with to_json), I passed it to JSON.parse as a string like below:

parsed_conf = JSON.parse(%{#{conf_json}})

It seems kind of weird to me, because when try to pass it to function like below, I got the error of can't convert Array into String.

parsed_conf = JSON.parse(conf_json)

But it is working like a charm right now.


Post a Comment for "Ruby - Parsing JSON Coming Via URL"