无法使用RUBY将请求解码为有效的JSON

时间:2013-08-20 19:00:36

标签: ruby json api httparty

我正在使用ruby 1.9.3和httparty gem:

进行以下API GET请求
uri= HTTParty.post("www.surveys.com/api/v2/contacts",
:basic_auth => auth,
:headers => { 'ContentType' => 'application/json' },
:body => {
  "custom_test" => test,
  "name" => firstname,
  "email" => emailaddress
}

变量authtestfirstnameemailaddress有效。这是我从我的请求中收到的回复:

{
  "code": "invalid_json",
  "description": "Request sent with Content-Type: application/json but was unable to decode request body as valid json.",
  "success": false
}
500
#<Net::HTTPInternalServerError:0x007fe4eb98bde0>

我发布此JSON请求的方式有什么问题?

编辑:值得注意的是,API允许您为联系人定义自定义属性,因此正文中的“custom_test”属性。

2 个答案:

答案 0 :(得分:3)

由于您收到内部服务器错误(500)而不是未接受(406),因此很可能服务器上存在编码问题,因为他不期待的异常发生而不是交付给您一个不错的错误解释什么是错的(这将是我的第一个猜测)。

但是,让我们说这是JSON通信的问题。也许您必须指定您接受json格式?

尝试

:headers => { 'ContentType' => 'application/json', 'Accept' => 'application/json' },

w3接受标头定义:

  

Accept request-header字段可用于指定响应可接受的某些媒体类型。接受标头可用于指示请求特别限于一小组所需类型,如在请求内嵌图像的情况下。

内容类型标题定义:

  

Content-Type entity-header字段指示发送给接收方的实体主体的媒体类型,或者在HEAD方法的情况下,指示请求为GET时已发送的媒体类型。

答案 1 :(得分:2)

您正在发送常规HTTP查询字符串,同时说它是json。 来自HTTParty手册:“正文:请求正文。如果是哈希,它将被转换为查询字符串格式,否则按原样发送。”

尝试:

:body => JSON.generate({
  "custom_test" => test,
  "name" => firstname,
  "email" => emailaddress
})

您需要'JSON'