사용해보십시오 :
나는 노력하고
a = A.new(*JSON[json].values)
a.class # => A < #<Class:0x00000102955828>
문제는 values
가를 반환한다는 것입니다 배열하지만 배열의 개별 요소가 필요합니다. *
을 사용하면 배열을 해당 구성 요소로 "다시 표시"하여 new
에 값을 전달할 때 구조체를 행복하게 만듭니다.
편집 :
This will fail if the ordering of the JSON and the Struct do not match!
이 값의 순서를 강제로.
a = A.new(*JSON[json].values_at('a', 'b'))
{
:a => 1,
:b => 2
}
a.class # => A < #<Class:0x00000102955828>
JSON은 Ruby와 마찬가지로 해시 삽입 순서를 유지하므로 Ruby에서 렌더링 및 파싱 된 JSON이 정확합니다. 순서를 유지하지 않는 것으로 렌더링 된 JSON은 문제 일 수 있지만 values_at
은 문제를 수정합니다.
JSON은 심볼을 문자열로 변환하므로 values_at
에 전달 된 키는 기호가 아니라 문자열이어야합니다.
이 실패합니다 작동합니다! – akuhn
JSON은 루비 해시와 마찬가지로 순서를 유지합니다. 따라서 Ruby에서 JSON을 생성 한 다음 Ruby에서받은 경우 순서는 손상되지 않아야합니다. 하지만 추가 할 간단한 해결 방법이 있습니다. –
예, 그렇습니다. 하지만 JSON도 웹에서 올 수 있습니다. 그런 다음 버그를 찾기가 정말 어렵습니다. – akuhn