Как правильно анализировать хэш-значения?

У меня есть вспомогательный метод, который вызывает api. Api преобразует текстовый файл в pdf и отвечает исходным путем файла, новым путем файла и количеством страниц. Ответ от api выглядит следующим образом:

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

Из моего понимания, я должен быть в состоянии получить доступ к ключевым ценностям, как это:

response[:numPages]
response[:previewPath]

Однако, когда я пытаюсь разобрать хэш таким образом, я получаю TypeError (нет неявного преобразования символа в целое число). Я довольно озадачен этим ответом, какие-то мысли?

РЕДАКТИРОВАТЬ

Это на самом деле работало на меня раньше, и я анализировал ответ так:

res = RestClient.post(uri.join,
{
    :file => File.new(file_path, 'rb')
})
response = []
response << res.split(/>(d)</)[1]
response << res.split(/<previewPath>(L:MailFilesPDFsub_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 ответ

  1. Код, который в конечном итоге работает это:

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

    Там, вероятно, большой рефакторинг этого, если кто-то более опытный хочет показать мне свет, но это работает сейчас! Еще раз спасибо за комментарии и ответ.