【问题标题】:JSON::ParserError: A JSON text must at least contain two octets! (for non-nil input)JSON::ParserError: JSON 文本必须至少包含两个八位字节! (对于非零输入)
【发布时间】:2013-03-27 01:09:11
【问题描述】:

所以,我意识到 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"}

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

【问题讨论】:

    标签: ruby json post sinatra


    【解决方案1】:

    尝试以下方法:

    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
    

    【讨论】:

    • 所以这行得通。但后来我基本上把它改回了原来的样子,这也奏效了。所以我不知道出了什么问题。我的理论是,最初我发送了错误的数据(我使用了不同的 curl 请求),但是在试图让错误的数据正常工作时,我弄乱了 ruby​​ 代码。然后当我有一个很好的 curl 请求时,ruby 代码没有正确解析。但是给出了和以前一样的错误。好主。无论如何,你的回答让我恢复了理智,所以谢谢。
    猜你喜欢
    • 2016-08-30
    • 2012-01-13
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    相关资源
    最近更新 更多