2012-05-30 2 views
3

나는 Rails 3.2 serialization을 사용하여 루비 오브젝트를 json으로 변환하고 있습니다.Rails 3.2 : null 값을 json serialization의 빈 문자열로 대체하십시오.

예를 들어, 나는 빈 문자열이 비어 즉와 null 값을 교체해야 < ActiveRecord::Base

def as_json(opts = {}) 
    { 
    :type  => 'relationship', 
    :id   => id, 
    :followed_id => followed_id 
    } 
end 

내 클래스의 관계에서 다음과 같은 직렬화 방법을 사용하여

{ 
    "relationship":{ 
    "type":"relationship", 
    "id":null, 
    "followed_id": null 
    } 
} 

JSON 다음에 루비 객체를 직렬화 한 json에 대한 응답으로 큰 따옴표.

어떻게하면됩니까? 내가 여기에 문제가 표시되지 않습니다

+0

왜 그것을 해야할지, 어떤 문제가 없다면 더 이상 볼 수 있습니까? –

+0

Objective C는 null을 true/false와 같은 특수 문자열로 인식하지 않습니다. –

답변

4

하지 최고의 솔루션,하지만이 answer

def as_json(opts={}) 
    json = super(opts) 
    Hash[*json.map{|k, v| [k, v || ""]}.flatten] 
end 

에서 영감을 - 편집 : 그냥 || 연산자를 통해 그것을 만들 json 응답에 일부 입력란을 포함하려면 다음과 같이 입력하는 것이 좋습니다.

def as_json(opts={}) 
    opts.reverse_merge!(:only => [:type, :id, :followed_id]) 
    json = super(opts) 
    Hash[*json.map{|k, v| [k, v || ""]}.flatten] 
end 
+0

json의 모든 특성 (저자가 원하는 것은 아닙니다)이 나타나지 않게합니까? 나는 첫 번째 줄에 관한거야. 두 번째 것은 흠 잡을 데없는 것처럼 보인다. – jdoe

+0

@jdoe, 감사합니다! 업데이트 된 답변. – zsquare

+0

멋지다, 고마워! 현재 as_json은 모든 activeRecord 클래스에서 구현됩니다. 이 메소드를 부모 클래스, 즉 ActiveRecord :: Base에 넣을 수있는 방법이 있습니까? –

3

최고 감사합니다. 만 원하는 경우가 jdoe의 주석 사항에 따라

- 아마

def as_json(opts = {}) 
    { 
    :type  => 'relationship', 
    :id   => id || '', 
    :followed_id => followed_id || '' 
    } 
end 
+0

감사합니다 jdoe, 사실 모든 개체 직렬화에 대한 일부 일반 코드가 필요합니다 –

관련 문제