【问题标题】:How to correctly parse hash values?如何正确解析哈希值?
【发布时间】:2017-05-28 07:10:06
【问题描述】:

我有一个调用 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}"]

这真是令人讨厌,但至少我认为我可以解析它。会持续更新,感谢cmets的人!

【问题讨论】:

  • 你能粘贴代码来解释你如何解析 api 响应吗?
  • 这取决于它是如何被解析的。 HWIA 和普通哈希之间是有区别的,例如,response['numPages'] 如果不是 HWIA 应该可以工作。

标签: ruby-on-rails api hash


【解决方案1】:

最终运行的代码是这样的:

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

如果有更有经验的人想向我展示一下,这可能是一个很好的重构,但现在可行!再次感谢 cmets 和回答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 2017-05-29
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    相关资源
    最近更新 更多