2011-01-23 11 views
5

Uczę się, jak analizować i generować JSON z klejnotem JSON. Z łatwością mogę utworzyć mieszankę danych i wygenerować ją w JSON; jednak mam do czynienia z mózgowym pierdołem, jeśli chodzi o wzięcie instancji klasy (takiej jak instancja Person) i umieszczenie wszystkich jej zmiennych instancji w haszach w JSON.Przekształcanie niestandardowego obiektu w JSON przy użyciu JSON gem

Jest to przykład mam problemy z:

require "json" 

class Person 

    def initialize(name, age, address) 
    @name = name 
    @age = age 
    @address = address 
    end 

    def to_json 

    end 


end 

p = Person.new('John Doe', 46, "123 Elm Street") 
p.to_json 

Chcę utworzyć metodę .to_json tak, że mogę wziąć obiekt osoba i mieć wszystkich swoich zmiennych instancji przekształcone JSON. Myślę, że muszę pobrać wszystkie zmienne instancji osoby, umieścić je w haszyszu, a następnie wywołać JSON.generate(hash). Mam pomysł, jak to zrobić w tej chwili. Czy ktoś może mi pomóc w ukończeniu metody to_json, czy może zaproponuje lepszy sposób jej implementacji? Dzięki!

+0

Jeśli używasz Railsów, helper jest już dla ciebie gotowy i możesz łatwo uzyskać to, co chcesz, uruchamiając ' .to_hash' lub' .to_json'. Zobacz moje źródło dla akcji 'author_list': https://github.com/shybovycha/strong-sword/blob/master/app/controllers/quotes_controller.rb#L29 – shybovycha

Odpowiedz

11

Najpierw trzeba upewnić się użyć prawego podstawową strukturę:

def to_json(*a) 
    { 
    'json_class' => self.class.name, 
    'data'   => Your data 
    }.to_json(*a) 
end 

Kluczem json_class jest używany przez gem JSON, aby ustalić, co klasa przekazać dane. Parametr *a zawiera wszystkie argumenty, które przekazuje klejnot JSON, na ogół nieistotne dla twoich klas, więc po prostu przekaż je bezpośrednio do wywołania hashowego to_json. Następny najprostszych sposobów, aby przechowywać dane są hash lub tablicą:

'data'   => [@name, @age, @address] 

lub

'data'   => { 'name' => @name, 'age' => @age, 'address' => @address 

Pierwszy może być szybciej i sprawia, że ​​metoda self.json_create nieco łatwiej pisać, podczas gdy druga jest dużo łatwiej jest zrobić kompatybilność wsteczną, jeśli kiedykolwiek zmienisz strukturę danych i chcesz załadować stare obiekty JSON.

Powiązane problemy