Come convertire un Rubino oggetto JSON

Vorrei fare qualcosa di simile a questo:

require 'json'

class Person
attr_accessor :fname, :lname
end

p = Person.new
p.fname = "Mike"
p.lname = "Smith"

p.to_json

È possibile?

InformationsquelleAutor kapso | 2010-07-12

 

3 Replies
  1. 20

    Provare. Se si sta utilizzando Ruby on Rails (e il tag di dire che siete), penso che questo codice esatto, dovrebbe funzionare già, senza bisogno di nulla.

    Guide supporta JSON uscita dal controller, quindi è già tira in tutte le serializzazione JSON codice che avrete bisogno di mai. Se hai intenzione di uscita di questi dati attraverso un controller, si potrebbe essere in grado di risparmiare tempo per scrivere

    render :json => @person
    • Che cosa è la Persona ha le associazioni?
    • Questa risposta vale solo per Guide di progetti. Che dire di vaniglia Ruby?
    • Direi che non si applicano alle Guide.. si applicano solo per il controller all’interno di una applicazione rails.. molto limitato.
  2. 16

    Per rendere la vostra classe Ruby JSON-friendly senza toccare le Rotaie, devi definire due metodi:

    • to_json, che restituisce un oggetto JSON
    • as_json, che restituisce un hash rappresentazione dell’oggetto

    Quando l’oggetto risponde correttamente ad entrambe to_json e as_json, può comportarsi correttamente anche quando si è annidato in profondità all’interno di altre classi come Array e/o Hash:

    #!/usr/bin/env ruby
    
    require 'json'
    
    class Person
    
        attr_accessor :fname, :lname
    
        def as_json(options={})
            {
                fname: @fname,
                lname: @lname
            }
        end
    
        def to_json(*options)
            as_json(*options).to_json(*options)
        end
    
    end
    
    p = Person.new
    p.fname = "Mike"
    p.lname = "Smith"
    
    # case 1
    puts p.to_json                  # output: {"fname":"Mike","lname":"Smith"}
    
    # case 2
    puts [p].to_json                # output: [{"fname":"Mike","lname":"Smith"}]
    
    # case 3
    h = {:some_key => p}
    puts h.to_json                  # output: {"some_key":{"fname":"Mike","lname":"Smith"}}
    
    puts JSON.pretty_generate(h)    # output
                                    # {
                                    #   "some_key": {
                                    #     "fname": "Mike",
                                    #     "lname": "Smith"
                                    #   }
                                    # }

    Vedi anche “Utilizzando il custom to_json metodo di oggetti nidificati“.

Lascia un commento