0

我正在 Ruby/Sinatra 中构建一个出版物,它使用 JSON 中的两个参数(“local_delivery_time”和“tubelines”)响应 GET 调用(来自我无法控制的 API 服务器)。目前一个示例调用是;

http://my.herokuapp.com/edition/?local_delivery_time=0012-11-02T21:00:00+00:00&tubelines=%7B%22Bakerloo%22=%3E%220%22,%20%22Central%22= %3E%220%22,%20%22Circle%22=%3E%220%22,%20%22District%22=%3E%220%22,%20%22DLR%22=%3E%220%22,% 20%22Hammersmith%20and%20City%22=%3E%220%22,%20%22Jubilee%22=%3E%220%22,%20%22Metropolitan%22=%3E%221%22,%20%22Northern% 22=%3E%220%22,%20%22地上%22=%3E%221%22,%20%22皮卡迪利%22=%3E%220%22,%20%22维多利亚%22=%3E%220%22 ,%20%22滑铁卢%20和%20城市%22=%3E%220%22%7D

因此,一旦它从 uri 未编码,“tubelines”参数就会作为 Ruby 哈希(我相信?),即

{"Bakerloo"=>"0", "Central"=>"0", "Circle"=>"0", "District"=>"0", "DLR"=>"0", "Hammersmith and City "=>"0", "Jubilee"=>"0", "Metropolitan"=>"1", "Northern"=>"0", "Overground"=>"1", "Piccadilly"=>"0 ", "维多利亚"=>"0", "滑铁卢和城市"=>"0"}

但是当我尝试在它上面运行这个 .each 代码时(将值为“1”的键推送到另一个数组);

tubelines.each do |key, value|
    if value == "1"
        @selectedlines.push(key)
    end
end

我收到此错误“NoMethodError - # 的未定义方法‘每个’”,它显示带有转义引号的散列。像这样;

{\"Bakerloo\"=>\"0\", \"中央\"=>\"0\", \"Circle\"=>\"0\", \"区\"=>\"0 \", \"DLR\"=>\"0\", \"Hammersmith and City\"=>\"0\", \"Jubilee\"=>\"0\", \"Metropolitan\"= >\"1\", \"北方\"=>\"0\", \"地上\"=>\"1\", \"皮卡迪利\"=>\"0\", \"维多利亚\ "=>\"0\", \"滑铁卢和城市\"=>\"0\"}

我无法更改调用的格式,那么如何处理转义引号以便使用哈希?我尝试通过 JSON 解析它,但解析器似乎对转义引号有同样的问题(它返回一个意外的令牌错误),当我手动输入完全相同的哈希时,代码运行良好。

我已经看到很多关于编码 JSON 对象和转义引号的问题,但没有发现任何关于在接收 JSON 对象或调用时处理转义引号的问题......

4

1 回答 1

0

我同意 Frederick Cheung 的意见,这是一种发送数据的混乱方式。让他们用 POST 请求发送 JSON 怎么样?处理起来容易得多:

post "/edition", :provides => :json do
  data = JSON.parse params["data"]
  local_delivery_time = data["local_delivery_time"]
  tubelines = data["tubelines"]
  # do something here...
end

他们只是向那里发送 POST 请求,将“数据:”键中的所有数据。

也有可能与 GET 一起使用,但主要的事情是不要在 url 中发送疯狂的东西,因为它只会让你的生活变得艰难。我相信你会很高兴将它传递给运行服务器的人!:)

于 2012-11-10T00:44:06.807 回答