Ich habe diesen Fehler erhalten und konnte keine vernünftige Antwort auf diese Frage finden. Daher dachte ich, ich würde eine Zusammenfassung des Problems schreiben.
Wenn Sie dieses Snippet in irb ausführen:
JSON.parse( nil )
Sie sehen den folgenden Fehler:
TypeError: can't convert nil into String
Ich hatte erwartet, dass die Funktion zurückkehren würde nil
, und nicht a TypeError
. Wenn Sie alle Eingaben mit konvertieren to_s
, wird der Oktettfehler angezeigt:
JSON::ParserError: A JSON text must at least contain two octets!
Das ist gut so. Wenn Sie nicht wissen, was ein Oktett ist, lesen Sie diesen Beitrag, um eine Zusammenfassung und Lösung zu erhalten: Was ist ein JSON-Oktett und warum sind zwei erforderlich?
Lösung
Die Variable, die Sie übergeben, ist eine leere Zeichenfolge. Versuchen Sie nicht, eine leere Zeichenfolge in der JSON.parse
Methode zu verwenden.
Frage
Nun, da ich die Fehlerursache kenne, welches Muster sollte ich verwenden, um damit umzugehen? Ich hasse es ein bisschen, die JSON-Bibliothek mit Affen zu patchen, um nil
Werte zuzulassen . Anregungen wäre sehr dankbar.
""
, die zwei Oktette beträgt (und ein absolutes Minimum-Objekt ist{}
). Könnte sein, wer auch immer geschrieben hat, dass Encoder / Parser nicht berücksichtigt hat, dass diesnull
auch ein gültiger Javascript-Wert ist.