我正在Ruby / Sinatra中构建一个发布,它使用JSON中的两个参数(“local_delivery_time”和“tubelines”)响应GET调用(来自API服务器,我无法控制)。目前,一个示例呼叫是;
所以一旦它从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 \”,\“Central \”=> \“0 \”,\“Circle \”=> \“0 \”,\“区\ “=> \”0 \“,\”DLR \“=> \”0 \“,\”Hammersmith and City \“=> \”0 \“,\”Jubilee \“=> \” 0 \“,\”Metropolitan \“=> \”1 \“,\”Northern \“=> \”0 \“,\”Overground \“=> \”1 \“,\”Piccadilly \ “=> \”0 \“,\”Victoria \“=> \”0 \“,\”滑铁卢和城市\“=> \”0 \“}
我无法更改调用的格式,因此如何处理转义的引号以便我可以使用哈希?我试过通过JSON解析它,但解析器似乎与转义引号有相同的问题(它返回一个意外的令牌错误),当我手工输入完全相同的哈希时,代码运行完美。
我已经看到很多关于编码JSON对象和转义引号的问题,但是在接收JSON对象或调用时没有发现任何有关处理转义引号的问题......
答案 0 :(得分: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请求将所有数据都放在“data:”键中。
也可能会使用GET,但主要的不是在网址中发送疯狂的东西,因为它只会让你的生活变得艰难。我相信你会把它传递给运行服务器的人们! :)