Ich habe eine Schnur
str = "{'a':1}";
JSON.parse(str);
VM514:1 Uncaught SyntaxError: Unexpected token '(…)
Wie kann ich die obige Zeichenfolge (str) in ein JSON-Objekt analysieren?
Dies scheint eine einfache Analyse zu sein. Es funktioniert aber nicht.
javascript
json
Coderaemon
quelle
quelle
var str = "bad example";
ist keine gute Praxis, machen Sie besser Folgendes:var str = 'good example';
=> So haben Sie keine Probleme mit JSON und Sie werden auch keine Probleme mit HTML haben. :)Antworten:
Der JSON-Standard erfordert doppelte Anführungszeichen und akzeptiert weder einfache Anführungszeichen noch den Parser.
Wenn Sie einen einfachen Fall ohne einfache Anführungszeichen in Ihren Zeichenfolgen haben (was normalerweise unmöglich wäre, aber dies ist kein JSON), können Sie dies einfach tun
str.replace(/'/g, '"')
und sollten am Ende einen gültigen JSON erhalten.quelle
'title': "Mama's Friend"
wird"title": "Mama"s Friend"
, was natürlich ungültig ist! Ich sollte Ihre Antwort ablehnen, bin aber gegen eine Ablehnung. Dieser Kommentar ist viel mehr wert.Ich weiß, dass es ein alter Beitrag ist, aber Sie können JSON5 für diesen Zweck verwenden.
<script src="json5.js"></script> <script>JSON.stringify(JSON5.parse('{a:1}'))</script>
quelle
{'section': "24'"}
was wird:{"section": "24""}
und wird nicht analysieren.<script>JSON.stringify(some_jsonString)</script>
Wenn Sie sicher sind, dass Ihr JSON sicher unter Ihrer Kontrolle steht (keine Benutzereingabe), können Sie den JSON einfach auswerten. Eval akzeptiert alle Anführungszeichen sowie nicht zitierte Eigenschaftsnamen.
var str = "{'a':1}"; var myObject = (0, eval)('(' + str + ')');
Die zusätzlichen Klammern sind aufgrund der Funktionsweise des Eval-Parsers erforderlich. Eval ist nicht böse, wenn es für Daten verwendet wird, über die Sie die Kontrolle haben. Weitere Informationen zum Unterschied zwischen JSON.parse und eval () finden Sie unter JSON.parse vs. eval ()
quelle
var str = "{'a':1}"; str = str.replace(/'/g, '"') obj = JSON.parse(str); console.log(obj);
Dies löste das Problem für mich.
quelle
{'a':"A'A"}
wird{"a":"A"A"}
Etwas wie das:
var div = document.getElementById("result"); var str = "{'a':1}"; str = str.replace(/\'/g, '"'); var parsed = JSON.parse(str); console.log(parsed); div.innerText = parsed.a;
<div id="result"></div>
quelle
Die Verwendung von einfachen Anführungszeichen für Schlüssel ist in JSON nicht zulässig. Sie müssen doppelte Anführungszeichen verwenden.
Für Ihren Anwendungsfall wäre dies vielleicht die einfachste Lösung:
str = '{"a":1}';
Quelle :
quelle
json = ( new Function("return " + jsonString) )();
quelle
Function
anstelle von eval ist gesund, aber alles andere ist falsch. Es sollte seinvar json = Function("'use strict';return " + jsonString)()