2011-02-09 2 views
0

개체 배열 (클래스 B의 개체)을 포함하는 하나의 개체 (클래스 A 개체)의 JSON 문자열을 만드는 것이 좋습니다. 나는 특히 클래스의 A to_json 메소드의 구현에 대해 집중적으로 다룹니다.Ruby를 사용하여 다른 객체의 배열을 포함하는 한 객체의 JSON 문자열을 만드는 것이 가장 좋습니다.

class A 
    attr_accessor :items 
    def initialize() 
    @items = Array.new 
    end 
    def to_json(*a) 
    ?SECRET OF THE DAY? 
    end 
end 

와 클래스 B : 내가 지금까지 가지고

class B 
    def to_json(*a) 
    {"class B" => "class B"}.to_json(*a) 
    end 
end 

가장 좋은 솔루션입니다 : 가정

def to_json(*a) 
    json = Array.new 
    @items.each do |item| 
    json << item.to_json(*a) 
    end 
    {"class A" => json}.to_json(*a) 
end 

하나가 다음과 같이

가정 클래스 A 보인다 항목을 클래스 A의 객체 배열로 만들면 결과 JSON 문자열은 다음과 같이 표시됩니다.

,

{ "클래스 A": [ "{\"클래스 B \ "을 \"클래스 B \를 "}"]}

내가 더 잘 우리가 할 수있는 확신

?

답변

1

나는 당신의 접근 방식이 대신

def to_json(*a) 
     {"class A" => @items}.to_json(*a) 
end 

문제를 할 것이다 당신의 @items 배열이 문자열이 아닌 객체를 포함한다는 것이다. 이 경우 to_json은 객체 배열이 아닌 문자열 배열을 생성합니다.

+0

나는 이것을 전에 시도했는데, 클래스 A에서 IOError 예외가 발생하여 to_json이 "읽지 않은 상태로 열리지 않았다"고 말합니다. – Scholle

1

json/json_pure를 1.5.1으로 재설치/업그레이드하면 결국 IOError 예외 문제가 해결됩니다.

사용 : 레일 3.0.3 루비 1.9.2p136 (2010-12-25 수요일 수정 30,365) 1.5.1

http://www.ruby-forum.com/topic/1052511#new 참조 [I386-darwin9.8.0] JSON 1.5.1 json_pure 추가 안내 ...

관련 문제