다음 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 파일에 계속 액세스 할 예정입니까? –
아니요, zip 파일은 전송되지 않으므로': application'의 전체 내용을'eval'을 호출하기 전에 동등한 문자열 객체로 변환하면됩니다. – nemo
하지만 양도 했습니까? 그렇다면 전체 zip 파일을 읽고 수동으로 직렬화해야합니다. 그런 문제를 파악한 후에는 마샬이나 JSON 또는 XML 또는 다른 데이터 교환 형식을 살펴보고 Ruby 문자열을 감싸고 'eval'은 삶을 살아갈 길이 없습니다. –