CentOS 6.4의 RVM에서 Ruby 1.9.3-p392
으로 JSON을 구문 분석 할 때 이상한 문제가 발생합니다. 임베디드 객체를 적절한 Ruby 클래스로 디코딩하는 대신 객체를 해시로로드하는 것입니다. Ruby 1.9.3-p194
에서 제대로 작동합니다.Ruby 1.9.3 JSON 구문 분석
Ruby 1.9.3-p392
에서 같은 조각을 실행하면
#<TestMe:0x00000001c877f0>
, 그것은 다음과 같은 출력 :
require 'json'
class TestMe
attr_accessor :me
def initialize(option_hash = nil)
if option_hash
@me = option_hash['me']
end
@me ||= "Hello"
end
def to_json(*a)
{
JSON.create_id => self.class.name,
'data' => {
"me" => @me
}
}.to_json(*a)
end
def self.json_create(o)
new(o['data'])
end
end
t = TestMe.new
t.me = "foo"
t2 = JSON.parse(t.to_json)
puts t2
내가 Ruby 1.9.3-p194
에서이 작업을 실행하면 다음과 같은 출력 :
는 다음과 같은 샘플을 채취
{"json_class"=>"TestMe", "data"=>{"me"=>"foo"}}
p194
의 동작 내가 이이고 문서가 암시하는 내용이 무엇입니까? p392
JSON 데이터를 올바르게 파싱하지 않는 이유는 무엇입니까?
2.0.0에서도 p392 동작이 발생하므로 의도 한 변경 사항을 적용해야합니다. – Linuxios
이 변경 사항을 설명하는 설명서에서 명백한 내용을 놓쳤습니까? 제 말은 ... 이전 버전과 호환되지 않습니다 ... – organicveggie
이것은 최근의 [보안 권고] (https://support.cloud.engineyard.com/entries/23143553-Security-Fabruary-11-11-2013-Rails)와 관련이 있습니다. JSON-Vulnerabilities) 및 Rails에 대한 패치를 제공합니다. 이것은 매우 신중한 변화 일 수 있습니다. 중립적 인 데이터 전용 전송 메소드로 생각되었던 것에 기본적으로 Ruby 객체의 임의적 인 인스턴스화를 허용하는 것은 결코 좋은 생각이 아닙니다. – tadman