1

我正在构建一个针对 API 使用 cURL 命令的脚本。我发送格式化为application/json请求的 cURL 命令并获取结果,然后将其解析为 Ruby 哈希。

当我使用 cURL POST 命令获得格式正确的 JSON 响应时,这非常有用。但是,当使用 cURL GET 命令时,我会返回一个包含标题的 JSON 文档:

puts r:

HTTP/1.1 200 OK
X-Compute-Request-Id: req-7e625990-068b-47d1-8c42-9d3dd3b27050
Content-Type: application/json
Content-Length: 1209
Date: Wed, 16 Jan 2013 20:47:41 GMT

{ <JSON DATA> }

当我尝试执行 a 时,JSON.parse(r)我在“HTTP/1.1.”处收到了意外的令牌错误。

我的方法:

def list_flavors

    r = %x(curl -s -k -D - -H \"X-Auth-Token: #{$token}\" -X 'GET' http://10.30.1.49:8774/v2/27e60c130c7748f48b0e3e9175702c30/flavors -H 'Content-type:     application/json')

   response = JSON.parse(r)

   response
end

有没有办法使用正则表达式将正文从 JSON 文档中提取出来然后解析?

或者当我从 cURL 获得响应时,我会以错误的方式解决这个问题?

4

1 回答 1

2

在将字符串传递到JSON.parse. JSON.parse只需要有效的 json。

我建议您使用非常通用的 ruby​​ Net::HTTP和/或OpenURI库,而不是卷曲并使用批发的东西作为字符串,这将允许您轻松访问没有标头的响应正文。

于 2013-01-16T21:08:32.107 回答