2012-09-10 3 views
4

Rails의 .to_json() 메소드를 사용하여 해시를 JSON으로 변환합니다.데이터베이스에 저장하면 JSON의 멀티 바이트 문자가 손실됩니다.

해시 :

{ "Größe" => "XL" } 

JSON 다음 JSON 문자열이 hstore에 저장된 후 것을 (포스트 그레스) 열이 레일에 의해 정적라고

"{\"Gr\\u00f6\\u00dfe\":\"XL\"}" 

(3.2.6) SQL 명령 :

UPDATE ... "static" = 'options=>"{\"Gr\u00f6\u00dfe\":\"XL\"}"' WHERE ... 

이미 있습니다 역 슬래시가 누락되었습니다. 데이터베이스 자체 정적 열에서

은 다음과 같습니다 u00f6u00dfe에 대한

"options"=>"{\"Gru00f6u00dfe\":\"XL\"}" 

모든 백 슬래시 갔다.

{ "Gru00f6u00dfe" => "XL" } 

사람이 아이디어는 어떻게이 문제를 방지 할 수 있습니다 : 그것은 다음과 같은 해시를 반환 있도록

JSON.parse()는 더 어떤 멀티 바이트 문자를 식별하지 않는 이유는 무엇입니까? 어떤 도움을 주셔서 감사합니다!

답변

0

레일은 PostgreSQL의 hstore를 지원하지 않습니다. 하지만 수정이 쉽고, 그냥 activerecord-postgres-hstore 보석을 사용하십시오. activerecord-postgres-hstore을 사용하면 직렬화 또는 인코딩 문제를 해결할 수 있습니다. 여기

1) 보석 &를 설치 한 다음 지금) 지수

3

CREATE INDEX my_table_gin_static ON my_table USING GIN(static); 
에게 추가)

class ChangeHStoreDateTypeInMyTable < ActiveRecord::Migration 
    def change 
    change_column :my_table, :static, :hstore 
    end 

2 hstore하는 정적 열 유형을 변경하는 방법, 당신은 모델 개체를 인스턴스화 할 수 있습니다 & 직렬화 또는 인코딩 걱정없이 정상적으로 값을 업데이트하십시오.

@model.static["Größe"] = "XL" 

상세 정보 : https://github.com/softa/activerecord-postgres-hstore

+0

당신의 노력에 감사하지만,이 문제는 JSON 인코딩에 의한 것으로 보인다. 다차원 배열이기 때문에 직렬화에 JSON을 사용하고 싶습니다. Postgres 9.2가 같은 날에 나온 이래로 새로운 JSON 데이터 유형으로 직접 해결하려고합니다. – Railsana

관련 문제