如何正确解析哈希值?

时间:2017-01-13 00:49:52

标签: ruby-on-rails api hash

我有一个调用api的辅助方法。 api将文本文件转换为pdf,并以原始文件路径,新文件路径和页数进行响应。 api的反应如下:

response = {"originalPath":"FILE_PATH", "previewPath":"DIFFERENT_PATH", "numPages":1}

根据我的理解,我应该能够访问这样的键值:

response[:numPages]
response[:previewPath]

但是,当我尝试以这种方式解析哈希时,我得到一个TypeError(没有将Symbol隐式转换为Integer)。我对这种反应感到非常难过,有什么想法吗?

修改

这实际上对我有用,我正在解析这样的响应:

res = RestClient.post(uri.join,
{
    :file => File.new(file_path, 'rb')
})
response = []
response << res.split(/>(\d)</)[1]
response << res.split(/<previewPath>(L:\\MailFiles\\PDF\\sub_order_\d*\.pdf)/)[1]
response

正如我所说,这对我来说很有用,但现在当我把它还给回调控制器时,我的回答是:

[nil, nil]

非常困惑。

修改

现在,我已将上述内容更改为:

response << res.body

看起来像这样:

["{\"originalPath\":\"L:\\\\MailFiles\\\\Originals\\\\file.plain\",\"previewPath\":\"L:\\\\MailFiles\\\\PDF\\\\sub_order_110986.pdf\",\"numPages\":1}"]

哪个是令人讨厌的地狱,但至少我认为我可以解析它。将继续更新,感谢评论人员!

1 个答案:

答案 0 :(得分:0)

最终工作的代码是:

res = []
res << response.body.split(/numPages":(\d)/)[1]
res = res[0].to_i

如果有更多有经验的人希望向我展示光明,那么这可能是一个很好的重构,但现在这个有效!再次感谢您的评论和回答。