Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby JSON.parse错误_Ruby_Regex_Json - Fatal编程技术网

Ruby JSON.parse错误

Ruby JSON.parse错误,ruby,regex,json,Ruby,Regex,Json,我正在构建一个针对API使用cURL命令的脚本。我发送格式化为application/json请求的cURL命令并获得结果,然后将其解析为Ruby哈希 当我使用curlpost命令获得正确格式的JSON响应时,这非常有效。但是,当使用cURL-GET命令时,返回的JSON文档具有标题: puts r: HTTP/1.1 200 OK X-Compute-Request-Id: req-7e625990-068b-47d1-8c42-9d3dd3b27050 Content-Type: appl

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

当我使用curlpost命令获得正确格式的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> }
有没有一种方法可以使用正则表达式将主体从JSON文档中拉出来,然后进行解析


或者当我从cURL获得响应时,我是不是走错了方向?

在将字符串传递到
JSON.parse
之前,您需要找到一种方法来剪切该标题
JSON.parse
只需要有效的JSON


我建议您使用功能非常丰富的ruby和/或库,而不是卷曲并将其作为字符串整体使用,这样您就可以轻松地访问响应的正文,而无需使用标题。

我之前已经签出了URI,但我提出请求的API严格要求使用卷曲POST,获取和删除用于检索JSON或发送JSON响应的命令。较低级别的Net::HTTP可以使用任何请求头,即
Net::HTTP::GET.new
Net::HTTP::Post.new
Net::HTTP::DELETE.new
。它们实际上与对正在访问的API的curl请求是无法区分的。如果您有任何其他问题,请通过评论告诉我,或者通过将此标记为答案告知我。嘿,克里斯,我实际上发现了我的问题…这是一个RTFM时刻。在curl请求中,我有一个-d-命令,它请求一个头。我删除了它,只得到了JSON主体。我感谢你的帮助!如果您不想要标题,为什么要传递-D-选项?按照建议使用net/http会更好(或者使用restclient之类的包装器)嘿,Frederick-谢谢!你为什么不用宝石呢?它使处理cURL变得更简单和习惯。我必须看一看,这对Ruby世界来说还是个新鲜事物:)谢谢!
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