ruby - JSON::ParserError:JSON 文本必须至少包含两个八位字节! (对于非零输入)

标签 ruby json post sinatra

所以,我意识到two questions已经有人问过这个问题,但(不幸的是)我的情况似乎有所不同。

Sinatra README说要对 POST 数据执行以下操作:

post "/api" do
  request.body.rewind  # in case someone already read it
  data = JSON.parse request.body.read
  "Hello #{data['name']}!"
end

当我尝试这个时,我得到:

JSON::ParserError: A JSON text must at least contain two octets!

其他问题涉及数据为零或格式不正确(\" 而不是 ")的情况,但我的情况似乎不错。如果我打开 irb 和 JSON.parse 与我正在发布的字符串完全相同,它就可以正常工作。

这是我用于测试的命令:

curl -XPOST http://localhost:5000/endpoint --data '{"foo":"bar","blah":"wat","abcdefghijklmnop":"qrstuvwxyz"}'

我觉得这应该非常明显,因为解析 POST 数据是网络服务器要做的一件非常基本的事情。显然不是。

编辑:如果我调用 logger.info Hash[params],我得到:

{"{\"foo\":\"bar\",\"blah\":\"wat\",\"abcdefghijklmnop\":\"qrstuvwxyz\"}"=>nil,   "splat"=>[], "captures"=>["endpoint"], "resource"=>"endpoint"}

...但我不确定这是否/如何有帮助。

最佳答案

按照这些思路尝试一些事情:

post "/api" do
  request.body.rewind  # in case someone already read it
  data = JSON.parse (request.body.read || '{"name":"Not Given"}')
  "Hello #{data['name']}!"
end

关于ruby - JSON::ParserError:JSON 文本必须至少包含两个八位字节! (对于非零输入),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15820028/

相关文章:

javascript - Geocomplete 在 Rails 5 中不起作用

ruby - Nokogiri XML 构建器向我的 XML 添加不需要的 "class=' 调用'"?

python - json解析python报错

http - 在真实设备上调用 api 时,Ionic 4 Http 失败响应(未知 url): 0 Unknown Error.

ruby-on-rails - 查找表的 Rails 关联

ruby-on-rails - 从我的 Ruby on Rails Gem 渲染 View

javascript - 如何将 json 值传递到 React 组件

javascript - 来自 JSON 的 jquery.addClass 无法正常工作

android - 如何在 android webview 中拦截 POST 数据

java - 在 JsonObject 上使用 getAsJsonArray