13 Stimmen

Wie JSON-Formatierung mit Rubys ActiveResource zu konsumieren?

ActiveRecord hat eine Änderung seines Standard-JSON-Ausgabeformats eingeführt. Es ging von

{ "user": { some_junk } }

a

{ some_junk }

ActiveResource ist anscheinend ihrem Beispiel gefolgt und erwartet, JSON zu konsumieren als

{ some_junk }

Ich versuche verzweifelt, einen RESTful-Webdienst zu nutzen, der Folgendes ausgibt

{ "user": { some_junk } }

Gibt es eine Möglichkeit, meine ActiveResource::Base-Klasse dazu zu veranlassen, dies zu tun? Hier ist mein Code.

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

Update : Ich gebe ActiveResource vorerst als defekt auf, es sei denn, jemand kennt die Antwort; in der Zwischenzeit konnte ich das gewünschte GET über

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!

10voto

chrismear Punkte 836

Ja, ActiveResource ist derzeit etwas unflexibel, was die Datenformate angeht.

Im Prinzip könnten Sie selbst ein benutzerdefiniertes Formatmodul schreiben (z. B. JsonWithRootFormat ), basierend auf dem ActiveResource::Formats::JsonFormat Modul, und geben Sie dieses Format in Ihrem Modell an:

self.format = :json_with_root

しかし ActiveResource::Base ist nicht sehr formatunabhängig - es ist derzeit macht einen Check um zu sehen, ob Sie mit XmlFormat und lässt den Wurzelknoten nur durch, wenn Sie es sind.

Sie könnten also das Gewünschte erreichen, indem Sie Ihr eigenes Formatmodul erstellen, et monkey-Parcheando ActiveResource::Base aber das ist kaum ideal. Ich bin sicher, ein Patch zu machen Base Eine etwas größere Formatunabhängigkeit wäre allerdings zu begrüßen.

0voto

Dale Zak Punkte 1038

Hier ist ein guter Blogbeitrag von @vaskas erklärt, wie Sie Ihren eigenen ActiveResource Formatter schreiben können.

Verwendung von Hashes als ActiveResource-Sammlungen

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X