2010-12-03 21 views
3

Quelqu'un sait-il pourquoi certains de mes éléments json sont en antislash (\) se sont échappés alors que d'autres ne le sont pas?Rails 3: Caractères d'échappement () apparaissant dans une partie de la chaîne JSON

{"first":"John","last":"Smith","dogs":"[{\"name\":\"Rex\",\"breed\":\"Lab\"},{\"name\":\"Spot\",\"breed\":\"Dalmation\"},{\"name\":\"Fido\",\"breed\":\"Terrier\"}]"} 

Idéalement, je voudrais qu'aucun d'entre eux à échapper ...

Cela a été généré en remplaçant as_json en deux modèles. La personne a beaucoup de chiens.

#models/person.rb 
class Person < ActiveRecord::Base 
    has_many :dogs 

    def as_json(options={}) 
    { 
     :first => first, 
     :last => last, 
     :dogs => dogs.to_json 
    } 
    end 
end 

#models/dog.rb 
class Dog < ActiveRecord::Base 
    belongs_to :people 

    def as_json(options={}) 
    { 
     :name => name, 
     :breed => breed 
    } 
    end 
end 

Répondre

7

Essayez de retirer le to_json sur dogs.to_json.

+0

** BINGO! ** Merci! Vous comprenez pourquoi cela est arrivé? parce que je ne ... pas encore trop vert. – Meltemi

+2

En appelant to_json sur des chiens, vous l'avez recodé et le second encodage a provoqué l'échappement. – rwilliams

+0

Je ne pouvais pas faire ce travail - en supprimant 'to_json', la chaîne' inspect' était retournée pour chaque 'Dog'. Mais cette approche a fonctionné: http://stackoverflow.com/questions/4170372/serializing-and-deserializing-complex-rails-objects-with-json/4170710#4170710 – zetetic