Was verursacht diesen Fehler in der dritten Zeile?
var products = [{
"name": "Pizza",
"price": "10",
"quantity": "7"
}, {
"name": "Cerveja",
"price": "12",
"quantity": "5"
}, {
"name": "Hamburguer",
"price": "10",
"quantity": "2"
}, {
"name": "Fraldas",
"price": "6",
"quantity": "2"
}];
console.log(products);
var b = JSON.parse(products); //unexpected token o
Öffnen Sie die Konsole, um den Fehler anzuzeigen
javascript
jquery
json
coiso
quelle
quelle
Antworten:
products
ist ein Objekt. (Erstellen aus einem Objektliteral)JSON.parse()
wird verwendet, um eine Zeichenfolge mit JSON-Notation in ein Javascript-Objekt zu konvertieren .Ihr Code verwandelt das Objekt in eine Zeichenfolge (durch Aufrufen
.toString()
), um zu versuchen, es als JSON-Text zu analysieren.Die
.toString()
Standarderklärungen"[object Object]"
, die nicht gültig JSON ist; daher der Fehler.quelle
.toString()
zurückkommt (gemäß der Spezifikation).Angenommen, Sie wissen, dass JSON gültig ist, aber Sie erhalten dies immer noch ...
In diesem Fall ist es wahrscheinlich, dass die Zeichenfolge versteckte / spezielle Zeichen enthält, aus welcher Quelle auch immer Sie sie erhalten. Wenn Sie in einen Validator einfügen, gehen sie verloren - aber in der Zeichenfolge sind sie noch vorhanden. Diese Zeichen sind zwar unsichtbar, brechen jedoch
JSON.parse()
Wenn
s
es sich um Ihren rohen JSON handelt, bereinigen Sie ihn mit:quelle
s = s.replace(/[\u0000-\u001F]+/g,"");
statt seins = s.replace(/[\u0000-\u0019]+/g,"");
, um alle Steuerzeichen zu ersetzen. Richtig?Es scheint, dass Sie das Objekt stringifizieren möchten . Also mach das:
Der Grund für den Fehler ist,
JSON.parse()
dass einString
Wert erwartet wird undproducts
einArray
.Hinweis: Ich denke, es versucht,
json.parse('[object Array]')
was sich beschwert, dass es kein Tokeno
danach erwartet hat[
.quelle
Ich habe das gleiche Problem mit gefunden
JSON.parse(inputString)
.In meinem Fall stammt die Eingabezeichenfolge von meiner Serverseite [Rückgabe einer Seitenmethode] .
Ich habe die
typeof(inputString)
- es war Zeichenfolge gedruckt , trotzdem tritt der Fehler auf.Ich habe es auch versucht
JSON.stringify(inputString)
, aber es hat nicht geholfen.Später stellte ich fest, dass dies ein Problem mit dem neuen Zeilenoperator
[\n]
innerhalb eines Feldwerts ist.Ich habe ersetzt [durch ein anderes Zeichen, setze die neue Zeile nach dem Parsen zurück] und alles funktioniert gut.
quelle
JSON.parse wartet auf einen String im Parameter. Sie müssen Ihr JSON-Objekt stringifizieren, um das Problem zu lösen.
quelle
ändern
quelle
JSON.parse
, müssen die Argumente eine Zeichenfolge sein.JSON.parse(products.replace(/'/g, '"'))
Sie sollten Ihre JSON-Zeichenfolge hier überprüfen .
Eine gültige JSON-Zeichenfolge muss in doppelten Anführungszeichen um die Schlüssel stehen:
Wenn keine Anführungszeichen vorhanden sind, wird ein Fehler verursacht:
Die Verwendung von einfachen Anführungszeichen führt ebenfalls zu einem Fehler:
quelle
render ([key: value])
mit einfachen Anführungszeichen gerendert , was zu JSON parseError an Position 1 in jquery Ajax führte.render (groovy.json.JsonOutput.toJson ([key:value]))
hat mir geholfen.Wenn führende oder nachfolgende Leerzeichen vorhanden sind, ist dies ungültig. Nachgestellte / führende Leerzeichen können als entfernt werden
Quelle: http://www.toptip.ca/2010/02/javascript-trim-leading-or-trailing.html
quelle
Hier ist dein perfekter Json, den du analysieren kannst.
quelle
Hier ist eine Funktion, die ich basierend auf früheren Antworten erstellt habe: Sie funktioniert auf meinem Computer, aber auf YMMV.
quelle
Ein weiteres Problem, das
"SyntaxError: Unexpected token"
beim Aufrufen zu Ausnahmen führen kann,JSON.parse()
ist die Verwendung einer der folgenden Zeichenfolgenwerte:Zeilenumbrüche.
Registerkarten (ja, Registerkarten, die Sie mit der Tabulatortaste erstellen können!)
Jeder eigenständige Schrägstrich
\
(aber aus irgendeinem Grund nicht/
, zumindest nicht auf Chrome.)(Eine vollständige Liste finden Sie im Abschnitt String hier .)
Zum Beispiel erhalten Sie diese Ausnahme:
Also sollte es geändert werden zu:
Was es, sollte ich sagen, im Nur-JSON-Format mit größerer Textmenge ziemlich unlesbar macht.
quelle
Wenn Sie die POST- oder PUT-Methode verwenden, müssen Sie den Körperteil stringifizieren.
Ich habe hier ein Beispiel dokumentiert: https://gist.github.com/manju16832003/4a92a2be693a8fda7ca84b58b8fa7154
quelle
Hoffentlich hilft das jemand anderem.
Mein Problem war, dass ich HTML in einer PHP-Rückruffunktion über AJAX kommentiert hatte, die die Kommentare analysierte und ungültiges JSON zurückgab.
Nachdem ich den kommentierten HTML-Code entfernt hatte, war alles in Ordnung und der JSON wurde ohne Probleme analysiert.
quelle
Produkte ist ein Array, das direkt verwendet werden kann:
quelle
Nun offenbar
\r
,\b
,\t
,\f
, etc. sind nicht die einzigen problematischen Zeichen , dass Sie diesen Fehler geben kann.Beachten Sie, dass einige Browser möglicherweise zusätzliche Anforderungen für die Eingabe von haben
JSON.parse
.Führen Sie diesen Testcode in Ihrem Browser aus:
Beim Testen auf Chrome sehe ich, dass es nicht erlaubt,
JSON.parse(String.fromCharCode(0x22, x, 0x22));
wox
34, 92 oder von 0 bis 31 sind.Chars 34 und 92 sind die
"
und\
Zeichen sind, und sie sind in der Regel erwartet und richtig übersetzt . Es sind die Zeichen 0 bis 31, die Ihnen Probleme bereiten würden.Bevor Sie das Debuggen unterstützen, stellen Sie
JSON.parse(input)
zunächst sicher, dass die Eingabe keine problematischen Zeichen enthält:quelle
Warum brauchen Sie JSON.parse? Es ist bereits im Array des Objektformats.
Verwenden Sie JSON.stringify besser wie folgt:
var b = JSON.stringify(products);
Dies kann Ihnen helfen.
quelle
Oh Mann, Lösungen in allen oben genannten Antworten haben bei mir nicht funktioniert. Ich hatte gerade ein ähnliches Problem. Ich habe es geschafft, es mit dem Zitat zu lösen. Siehe den Screenshot. Whoo.
Original:
quelle
Der Fehler, den Sie erhalten, dh "unerwartetes Token o", ist, dass json erwartet wird, aber das Objekt beim Parsen erhalten wird. Das "o" ist der erste Buchstabe des Wortes "Objekt".
quelle
Der einzige Fehler, den Sie machen, ist, dass Sie bereits analysierte Objekte analysieren, sodass ein Fehler ausgelöst wird. Verwenden Sie diese Option, und Sie können loslegen.
Wenn Sie den gesamten JSON drucken möchten, verwenden Sie JSON.stringify ()
quelle
Dies kann aus vielen Gründen geschehen, wahrscheinlich jedoch aufgrund eines ungültigen
JSON.stringify(obj);
Zeichens. Sie können also verwenden , um Ihr Objekt in einen JSON zu verwandeln. Denken Sie jedoch daran, dass es sich um einen JQUERY-Ausdruck handelt.quelle
Ich habe diesen Fehler, weil die API, die das JSON-Objekt zurückgegeben hat, einen Fehler ausgegeben hat (in meinem Fall Code Igniter, geben Sie einen HTML-Code zurück, wenn der PHP-Code fehlschlägt), sodass es sich nicht um ein JSON-Objekt handelt.
Überprüfen Sie die SQL-Sätze und den PHP-Code und testen Sie ihn mit Postman (oder einem anderen API-Tester).
quelle
Der Fehler, den ich machte, ging vorbei
null
(unwissentlich) an JSON.parse () übergeben.Also warf es
Unexpected token n in JSON at position 0
quelle
Verwenden Sie
eval
. Es verwendet JavaScript-Ausdruck / Code als Zeichenfolge und wertet ihn aus / führt ihn aus.quelle