具有有效JSON字符串的JSON.parse在Rack请求处理程序中返回nil。相同的字符串在机架外部解析良好

时间:2019-06-21 11:08:21

标签: json ruby sinatra rack

我的Sinatra服务器正在接收JSON字符串作为POST请求正文的一部分。读取请求正文并将其转换为这样的字符串:

request.body.rewind
body_str = request.body.read.force_encoding('utf-8')

当我尝试使用以下命令将该字符串转换为哈希时:

webhook_hash = JSON.parse(body_str)
logger.info(webhook_hash)

webhook_hash为nil,但解析器不会引发任何错误。

我已使用以下方法验证body_str是有效的JSON:

  • 将字符串打印到STDOUT并使用jsonlint
  • 将请求正文保存到文件,然后在单独的ruby脚本和JSON.parse中打开文件。使用bundle exec运行以下命令会得到正确的预期JSON:
require 'json'
json_from_file = File.read("webhook-body.json")
obj = JSON.parse(json_from_file)

我花了大约3个小时来做​​这件事,由于没有在任何地方抛出异常并且我不知道可能是什么原因,所以在这一点上我非常沮丧。

我想这个问题与Sinatra / Rack环境有关。我对Ruby的知识还比较初级,所以非常感谢您调试或修复此问题的任何指示!

0 个答案:

没有答案