6
votes

Rails - Serialize Modèle à Json avec Caméliser

J'ai besoin de sérialiser un modèle à JSON et que toutes les clés soient camélisées. Je vois qu'il y a une option dans TO_XML pour autoriser le boîtier de chameau. Je ne peux pas sembler confondre la sérialisation du Json à me donner un hachage camélisé. Est-ce quelque chose qui est possible dans les rails?


2 commentaires

Basé sur la recommandation de Bert, nous sommes allés avec Rabl. Impossible de ne pas être plus heureux, voici un tutoriel pour faire rouler avec Rabl: blog.dcxn.com/2011/06/22/Rails-json-Templates-through-rabl


Comment avez-vous eu Rabl pour revenir à JSON camélisé?


5 Réponses :


0
votes

Il me semble étrange d'utiliser des noms d'attribut camélisés dans les rails, encore moins Json. Je sert aux conventions et j'utiliserais des noms de variables soulignés.

Cependant, jetez un coup d'œil à ce joyau: Rabl . Il devrait être capable de vous aider.


3 commentaires

Bert- tu es sur la balle. Merci d'avoir examiné cette question aussi. J'essaie d'obtenir les rails API JSON pour être aussi propre que possible pour le développement JavaScript à l'autre extrémité. Rabl ressemble à cela pourrait me sauver une tonne de temps! Merci!


JavaScript utilise Camelcase par convention, n'aurait-il pas plus de sens que les attributs JSON soient aussi camélisés?


Conseil: Si vous utilisez quelque chose comme NGRESOURCE qui n'aime pas le JSON-API Réponses de style de Rabl, essayez d'utiliser Object @thing => false pour les objets et pour les objets et : Object_root => faux sur l'enfant et les collections



0
votes

Utilisation directe avec Rabl Renderer, vous pouvez passer un modèle en ligne, au lieu de la récupérer à partir d'un fichier:

Rabl::Renderer.new("\nattributes :name, :description", object).render


0 commentaires

11
votes

J'ai eu un problème similaire. Après un peu de recherche, j'ai enveloppé le As_json Méthode Activemodel avec une aide qui caméliore les touches de hachage. Ensuite, j'inclurais le module dans le (s) modèle (s) correspondant (s):

# lib/camel_json.rb
module CamelJson
  def as_json(options)
    camelize_keys(super(options))
  end

  private
  def camelize_keys(hash)
    values = hash.map do |key, value|
      [key.camelize(:lower), value]
    end
    Hash[values]
  end
end



# app/models/post.rb
require 'camel_json'
class Post < ActiveRecord::Base
    include CamelJson
end


2 commentaires

Pour des raisons purement scientifiques, j'ai utilisé ce code, mais j'ai dû le modifier pour vérifier que la clé et la valeur ne sont pas nulles. Mettez-le dans valeurs = hachap.map do | clé, valeur | changement mineur, je pensais juste que je le mentionnerais.


Notez que cette mise en œuvre ne convertira pas les clés de hachages imbriquées. Par exemple, user.as_json (uniquement: [: [: first_name], inclure :: mailing_address) laissera zip_code snake-cased: {"firstName" => " Alan "," mailingaddress "=> {" id ": 1," zip_code "=>" 10004 "} .



7
votes

Si vous utilisez des rails, ignorez la dépendance ajoutée et utilisez hachage # profonde_transform_keys code>. Il a également l'avantage supplémentaire de caméliser (pratique si vous faites quelque chose comme user.as_json (comprend:: my_associated_model) code>):

h = {"first_name" => "Rob", "mailing_address" => {"zip_code" => "10004"}}
h.deep_transform_keys { |k| k.camelize(:lower) }
=> {"firstName"=>"Rob", "mailingAddress"=>{"zipCode"=>"10004"}}


0 commentaires

0
votes

Pour mon cas, j'étais tenu de personnaliser certains noms clés.

Utilisation xxx

Mise en œuvre xxx


0 commentaires