문제점 요약 :Oj gem을 사용하여 해시를 JSON으로 직렬화하려고합니다. Oj가 해시의 기호 키를 문자열로 자동 변환하지 않는 것 같습니다. 직렬화 중에 Oj에 "문자열 화"옵션이 있는지 궁금합니다. Oj.dump로 직렬화 할 때 심볼을 문자열로 변환합니다.
이
내 해시의 예입니다example_hash =
{:id=>1234,
:asset_number=>"1234-5678",
:latitude=>34.78495,
:longitude=>-92.12899,
:last_tracking_record_id=>123456789,
:bearing=>42,
:threat_level=>:severe}
그리고 위과 같이 렌더링 :
결과 JSON 불행히도 나는 것 의미를 정확히 위처럼 키가render json: Oj.dump(example_hash)
자바 스크립트에서 요소를 액세스해야합니다 (예 : response[:asset_number]
). 몇 달 전에 클라이언트 측 코드가 구현되어 이제 Oj가 추가되었으므로 서버 측 직렬화 중에 키를 문자열 화하는 방법을 찾는 것이 좋습니다.
Oj에는 symbol_keys
이라는 옵션이 있습니다.이 옵션은 부울이지만 true
또는 false
중 하나를 설정하면 아무런 효과가 없습니다.
내가 발견 한 유일한 해결책은 this answer에 제안 된대로 with_indifferent_access
을 사용하는 것이지만 어떤 경우에는 해시 배열을 가지고 있습니다. Oj는 Json 직렬화의 속도를 높이기 위해 Oj 자체에서이 작업을 수행하는 방법을 찾기를 원한다는 것을 감안할 때 기술적으로 배열의 각 해시에 대해 해당 메서드를 호출 할 수 있습니다. 궁극적으로, 직렬화 중에 을 수행 할 옵션 또는 설정이 OJ에 있는지 궁금합니다.
필자는 compat 모드가 성능에 영향을주지 않으며 벤치 마크를 통해 내 유스 케이스에 놀랐다. 나는 10,000 개의 키로 해쉬 (string => int)를 사용했고 Benchmark.bmbm (다음의 주석에서 포맷 할 수 없음)으로 다음과 같은 결과를 얻었다. json 14.550000 0.270000 14.820000 (14.855023) oj default 3.420000 0.250000 3.670000 (3.684655) oj compat 3.500000 0.260000 3.760000 (3.758900) – cmwright
@cmwright 아 매우 좋습니다. 얼마 지나지 않아 성능에 문제가 없다는 것을 확실히 알고 있었지만 실제 벤치마킹을 한 번도 할 수 없었습니다. 알아두면 좋습니다. 이 질문은 내가 예상 한 것보다 더 많은 의견을 얻고있는 것처럼 보이므로 데이터를 대답에 추가하면 마음에 들으십니까? –
네, 절대적으로 그렇게하십시오. 다음 번에 컴퓨터에서 사용하는 코드의 요지를 게시 할 수 있습니다. – cmwright