Ich bin sehr neu in Ruby und versuche ein paar grundlegende Sachen. Wenn ich eine HTTP-Anfrage an den Server sende mit:
%Vor%Mein Server erkennt JSON-Daten als "{myrequest: myTest, reqid: 44, data: {name: test}}"
Aber wenn ich die Anfrage mit dem folgenden Ruby-Code sende:
%Vor%Er sieht es als "{\" bbrequest \ ": \" BBTest \ ", \" reqid \ ": \" 44 \ ", \" data \ ": {\" name \ ": \ "test \"}} " und der Server kann es nicht analysieren. Vielleicht gibt es einige zusätzliche Optionen, die ich festlegen muss, um eine Anfrage von Ruby zu senden, um diese zusätzlichen Zeichen auszuschließen?
Können Sie mir bitte helfen? Vielen Dank im Voraus.
Was Sie in der Shell tun, erzeugt ungültiges JSON. Ihr Server sollte es nicht akzeptieren.
%Vor%Dies ist JSON mit nicht-skalierten Schlüsseln und Werten, wird NIEMALS funktionieren. Ссылка Wenn Ihr Server diese Art von JSON akzeptiert, aber die zweite in Ihrem Beispiel nicht akzeptiert, ist Ihr Server defekt.
Mein Server sieht JSON-Daten als "{myrequest: myTest, reqid: 44, data: {name: test}}"
Ihr Server sieht eine Zeichenkette . Wenn Sie versuchen, es in JSON zu analysieren, wird es einen Fehler oder Müll erzeugen.
Er sieht es als "{\" bbrequest \ ": \" BBTest \ ", \" reqid \ ": \" 44 \ ", \" data \ ": {\" name \ ": \" test \ "}}"
Nein, so wird es über Rubys Object#inspect
gedruckt. Sie drucken den Rückgabewert von inspect irgendwo und versuchen dann zu beurteilen, ob es ein gültiger JSON ist - das ist es nicht, da diese Zeichenfolge, die Sie eingefügt haben, in die interaktive Ruby-Konsole (irb) oder in ein Ruby-Skript eingefügt wird. und es enthält eingebaute Escapes. Sie müssen sehen, dass Ihre JSON-Zeichenfolge roh ist, drucken Sie einfach die Zeichenfolge, anstatt sie zu überprüfen.
Ich denke, Ihr Server ist entweder kaputt oder noch nicht fertig, Ihr Curl-Beispiel ist kaputt und Ihr Ruby-Skript ist korrekt und funktioniert, sobald der Server repariert (oder beendet) wurde. Einfach weil
%Vor% Ihr Problem ist etwas anderes als das Vorhandensein von Escape-Zeichen in der Zeichenfolge. Diese werden nicht durch den Code angezeigt, den Sie zeigen, sondern durch irb oder .inspect. Wenn Sie in Ihrem Code (oder in einem Rails-Kontext, puts @body
) eine einfache logger.debug @body
einfügen, sehen Sie dies. Hier ist eine IRB-Sitzung, die den Unterschied zeigt:
In jedem Fall ist es am besten, die JSON-Codierung in Rails zu verwenden, indem Sie ActiveSupport::JSON.encode
nicht direkt aufrufen, sondern as_json
in Ihrem Modell überschreiben oder das Feature serializable_hash
verwenden. Dies wird Ihren Code auch sauberer machen. Sehen Sie sich die Top-Antworten zu dieser stackoverflow-Frage für Details an .
Tags und Links ruby ruby-on-rails-3 ruby-on-rails