2017-01-13 39 views
0

我有一個調用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}"] 

這是令人討厭的地獄,但至少我想我可以解析這個。將繼續更新,感謝評論人!

+0

你可以粘貼代碼來解析api響應嗎? –

+1

這取決於它如何被解析。 HWIA和純Hash之間有區別,例如,如果response不是HWIA,那麼'response ['numPages']'應該可以工作。 –

回答

0

該結束了工作的代碼是這樣的:

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

有可能是一個很好的重構,如果任何人都更有經驗想告訴我的光,但這個工程現在!再次感謝評論和答覆。