MultiJson :: LoadError:795:尝试解析传入的正文请求时出现意外的令牌

时间:2014-01-05 19:35:12

标签: ruby json sinatra

我正在失去理智,试图在Sinatra应用程序上解析传入的请求。

这是我的规格

 payload = File.read("./spec/support/fixtures/payload.json")
 post "/api/v1/verify_payload", { :payload => payload }
 last_response.body.must_equal payload

其中只是spec / support / fixtures / payload.json

{"ref":"refs/heads/master"}

我的路线看起来像

post '/verify_payload' do
  params =  MultiJson.load(request.body.read, symbolize_keys: true)
  params[:payload]
end

运行规范我收到以下错误:

MultiJson::LoadError: 795: unexpected token at 'payload=%7B%22ref%22%3A%22refs%2Fheads%2Fmaster%22%7D'

我试图以不同的方式解析身体请求而没有运气。

如何使请求有效JSON?

感谢

2 个答案:

答案 0 :(得分:1)

如果要发送JSON编码的POST正文,则必须将Content-Type标头设置为application / json。使用Rack :: Test,你应该能够做到这一点:

post "/api/v1/verify_payload", payload, 'CONTENT_TYPE' => 'application/json'

可替换地:

header 'Content-Type' => 'application/json'
post '/api/v1/verify_payload'

此处有更多信息:http://www.sinatrarb.com/testing.html

答案 1 :(得分:0)

问题是你传递的是ruby哈希,格式不正确,你应该传递一个json对象。

这样的事情应该有效:

发布" / api / v1 / verify_payload",{:payload => payload.to_json}