2009-05-05 6 views
13

ActiveRecord a introduit une modification de son format de sortie JSON par défaut. Il est passé deComment consommer le formatage JSON avec ActiveResource de ruby?

{ "user": { some_junk } } 

à

{ some_junk } 

ActiveResource a apparemment suivi leur avance, attendant à consommer JSON comme

{ some_junk } 

J'essaie désespérément de consommer un service web RESTful qui émet

{ "user": { some_junk } } 

Existe-t-il un moyen de dire à ma classe ActiveResource :: Base de le faire? Voici mon code.

class User < ActiveResource::Base 
    self.site = "http://example.com/" 
    self.format = :json 
end 

Mise à jour: Je donne sur ActiveResource comme rompu pour l'instant, à moins que quelqu'un connaît la réponse; en attendant, je suis en mesure d'atteindre l'EEG que je voulais via

require 'httparty' # sudo gem install httparty 
result = HTTParty.get('http://foo.com/bar.json', headers => { "Foo" => "Bar"}) 
# result is a hash created from the JSON -- sweet! 

Répondre

9

Ouais, ActiveResource est actuellement un peu rigide en ce qui concerne ses formats de données.

En principe, l'idée est que vous pouvez écrire vous-même un module de format personnalisé (par exemple JsonWithRootFormat), sur la base du module ActiveResource::Formats::JsonFormat, puis spécifiez que votre format dans votre modèle:

self.format = :json_with_root 

Cependant, ActiveResource::Base n'est pas très agnostique au format - il est actuellement does a check pour voir si vous utilisez XmlFormat, et ne passe que le nœud racine si vous êtes.

Ainsi vous pouvez obtenir ce que vous voulez en créant votre propre module de format, et en corrigeant le singe ActiveResource::Base, mais ce n'est guère idéal. Je suis sûr qu'un correctif pour faire Base un peu plus agnostique serait bienvenu, cependant.

0

Voici un bon article de blog par @vaskas expliquant comment écrire votre propre formateur ActiveResource personnalisé.

Utilisation Hashes comme ActiveResource Collections

http://vaskas.me/blog/2012/02/07/using-hashes-as-activeresource-collections/

+0

Le site est suivi mais je poste sur son GitHub (https://github.com/vaskas/vaskas.me/blob/master/blog/ 2012/02/07/using-hashes-as-activeresource-collections/index.html) - En fait, vous pouvez assigner votre propre objet de format à 'self.format'. Créez une nouvelle classe, 'include ActiveResource :: Formats :: JsonFormat' et définissez votre propre fonction' decode'. – phillmv

Questions connexes