У меня есть следующий объект карты Ruby, сериализованный на одном конце и полученный на другом. Когда он получен в целевой точке, мне нужно оценить его обратно на тот же объект карты, что и оригинал, и выполнить некоторую обработку.Почему возникает ошибка при десериализации объекта Ruby?
Тем не менее, оценка цели не работает с «синтаксической ошибкой, неожиданным $ end» msg.
Он не работает, потому что символ :application
относится к объекту UploadIO
.
Учитывая, что я могу изменить код только в том месте, где я получаю сериализованный объект, как наилучшим образом решить проблему? Преобразуйте значение :application
в строку или используйте какой-либо другой трюк?
eval ('
{"component"=>"CF",
"body"=>
["PUT",
"v2/apps/269e739c-5d08-429c-8682-d3200b79283b/bits",
{:payload=>
{
:resources=>"[]",
:application=>#<UploadIO:0x000000022af330 @content_type="application/zip">
}
}
]
}')
Ожидаете ли вы получить доступ к zip-файлу? –
no, zip-файл не переносится, поэтому я думаю, мне просто нужно преобразовать весь контент ': application' в эквивалентный строковый объект, прежде чем вызывать' eval' на нем. – nemo
Но вы * хотите * он перенесен? Если вы это сделаете, вам придется читать весь zip-файл и сериализовать его вручную. Как только вы решите проблему, вы можете взглянуть на маршал или JSON или XML или какой-либо другой формат обмена данными, строгая вокруг строк Ruby, а 'eval' не может пройти через жизнь. –