2017-05-22 3 views
-1

Ich versuche null Wert in JSON in Postgresql zu speichern. Wenn ich den folgenden Code verwenden:Speichern von JSON von API mit Nullwerten

resume = Resume.create!({ 
    parsedres: {"Resume":{"xml:lang":"en","xmlns":"http://ns.hrxml.org/2006-02-28","xmlns:vos":"http://noresm.com/hr-xml/2006-02-28","ResumeId":{"IdValue":null}}} 
}) 

Ich erhalte eine Fehlermeldung:

NameError: undefined local variable or method `null' for main:Object

Das Problem ist, ich API-Daten ohne "" für null erhalten und wenn ich JSON.parse

resume.parsedres = JSON.parse(response.body) 
resume.save 

Es wirft die

JSON::ParserError: 765: unexpected token at '<ParseResumeResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Code>Ack</Code><SubCode>Authentication/SubCode><Message>AccountID.</Message><CreditsRemaining>100</CreditsRemaining></ParseResumeResponse>' 

Warum interpretiert JSON.parse nicht null?

+1

Der JSON-Parser-Fehler sieht aus, als ob Sie versuchen, eine XML-Antwort zu parsen. Ich würde versuchen, den Antwortkörper zu überprüfen, ob es tatsächlich JSON ist (vielleicht müssen Sie einen Header in die Anfrage einfügen, um JSON-Inhalt zurückzubekommen). –

+0

Danke, ich habe JSON in meinem API-Aufruf angefordert. resume = Resume.new Antwort = RestClient :: Request.execute ( Methode:: Beitrag, URL: 'http: // API-Beispiel', Nutzlast: Parameter, ** Header: {"Content-Type" = > "application/json"} ** ) – cruisertom

+0

Sie könnten auch 'Accept' => 'application/json' in die Header einfügen. Wenn das nicht funktioniert, unterstützt die API möglicherweise nicht JSON, sondern nur XML. –

Antwort

1

Im ersten von Ihnen angegebenen Beispiel ist parsedres nicht JSON, sondern ein Ruby Hash Literal. Da die wörtliche Ruby-Code ist, müssten Sie Rubys nil Schlüsselwort statt null verwenden:

resume = Resume.create!({ 
    parsedres: {"Resume":{"xml:lang":"en","xmlns":"http://ns.hrxml.org/2006-02-28","xmlns:vos":"http://noresm.com/hr-xml/2006-02-28","ResumeId":{"IdValue":nil}}} 
}) 

Wenn Sie eine JSON-String aus der API erhalten haben, sollten Sie es analysieren, können Sie den Code verwenden Sie oben aufgeführten : wobei

require 'json' 

resume = Resume.create!({ 
    parsedres: JSON.parse('{"Resume":{"xml:lang":"en","xmlns":"http://ns.hrxml.org/2006-02-28","xmlns:vos":"http://noresm.com/hr-xml/2006-02-28","ResumeId":{"IdValue":null}}}') 
}) 

auf die Ausnahme geworfen

, es sieht aus wie die response.body XML-Daten, nicht JSON.

+0

Danke! 'Accept' => 'application/json' in den Headern hat's geschafft! – cruisertom

Verwandte Themen