2010-06-26 2 views
1

나는 하루 종일 힘들어했습니다. 해시를 조정 # to_json

>> strip_hash_keys_for_json({ "a" => 1 }).to_json 
=> "{ a: 1 }" 

그래서 당신이 그 문자열 키가 인용되지 않은 참조 : 내 레일 2.3.5 응용 프로그램에서, 나는 다음과 같은 일이 일어날 수 지정 코드의 무리가 있었다. String 자손 클래스를 생성하여 selfto_json에서 반환하고 모든 해시 키를이 클래스에 래핑했습니다.

오늘 앱을 Rails 3로 업그레이드하기 시작했습니다. JSON 인코딩 항목이 매우 심각하게 다시 작성 되었기 때문에 앱이 작동을 멈췄습니다. 아마 당신은 아시다시피

는 레일 3 해시의 JSON 표현을 만드는 두 가지 방법을 포함한다 :

해시의 요소 JSON에
  • encode_json 존재해야하는지 결정
    • as_json하는 실제로 반환 JSON을 포함하는 문자열 표현

    나는 encode_json이 무엇을하는지 관찰하고 일을 바꾸는 방법을 바꿀 수 있다고 생각했다. 거기에서 alled.

    문제는이 두 메서드가 전혀 호출되지 않는다는 것입니다. 나는 조사에서 내가 할 수있는 어리석은 실수를 모두 확인 했으므로 아무 것도 잘못 볼 수 없다. 구글도 도움이되지 않는다. 그래서 나는 도움을 받기 위해 펠로우에게 관심을 돌린다.

    고마워요.

    UPDATE

    OK 그래서 나는 이러한 방법 위해서는 내가 대신 직접 to_jsonActiveSupport::JSON::encode를 사용할 필요가 작동하는 것을 알아 냈다. 이것은 이 동일한 encoding.rb 파일에 정의 된 Object#to_json 메서드에 의해 처리되고, 차례로 ActiveSupport::JSON.encode(self, options)을 호출했기 때문에 이상하다고 생각됩니다.

    이제 완전히 혼란스러워합니다.

  • 답변

    0

    strip_hash_keys_for_json을 제거하면 어떻게됩니까?

    나는 콘솔을 열고있어 :

    ruby-1.8.7-p249 > Rails::VERSION::STRING 
    => "2.3.5" 
    ruby-1.8.7-p249 > { "a" => 1 }.to_json 
    => "{\"a\":1}" 
    
    +0

    는 당신이 가지고하는 to_json''의 표준 동작입니다. 그러나, 내 원하는 동작 문자열 키를 인용하지 않는 것입니다. 내가 그 질문을 분명하게 말하지 않았 느냐? –

    +0

    나는 본다. 코드 예제를 원하지 않는 동작으로 읽었습니다. –

    +0

    유효한 JSON은 문자열 키를 인용해야합니다. –

    관련 문제