Mam sznurek
str = "{'a':1}";
JSON.parse(str);
VM514:1 Uncaught SyntaxError: Unexpected token '(…)
Jak mogę przeanalizować powyższy ciąg (str) do obiektu JSON?
Wydaje się, że jest to prosta analiza. To jednak nie działa.
Mam sznurek
str = "{'a':1}";
JSON.parse(str);
VM514:1 Uncaught SyntaxError: Unexpected token '(…)
Jak mogę przeanalizować powyższy ciąg (str) do obiektu JSON?
Wydaje się, że jest to prosta analiza. To jednak nie działa.
var str = "bad example";to nie jest dobra praktyka, lepiej wykonaj następujące czynności: var str = 'good example';=> w ten sposób nie będziesz mieć żadnych problemów z JSON i nie będziesz mieć żadnych problemów z HTML. :)
Odpowiedzi:
Standard JSON wymaga podwójnych cudzysłowów i nie akceptuje pojedynczych cudzysłowów, podobnie jak parser.
Jeśli masz prosty przypadek bez cudzysłowów bez cudzysłowów w ciągach znaków (co normalnie byłoby niemożliwe, ale to nie jest JSON), możesz to zrobić str.replace(/'/g, '"')i powinieneś otrzymać prawidłowy JSON.
'title': "Mama's Friend"Stanie się "title": "Mama"s Friend", co jest oczywiście nieważne! Powinienem złagodzić twoją odpowiedź, ale jestem przeciwny. Ten komentarz jest wart znacznie więcej.
Wiem, że to stary post, ale możesz użyć do tego celu JSON5 .
<script src="json5.js"></script>
<script>JSON.stringify(JSON5.parse('{a:1}'))</script>
{'section': "24'"} które stanie się: {"section": "24""} i nie będzie przetwarzane.
<script>JSON.stringify(some_jsonString)</script>
Jeśli masz pewność, że Twój JSON jest bezpiecznie pod Twoją kontrolą (a nie dane wejściowe użytkownika), możesz po prostu ocenić JSON. Eval akceptuje wszystkie typy ofert, a także niecytowane nazwy właściwości.
var str = "{'a':1}";
var myObject = (0, eval)('(' + str + ')');
Dodatkowe nawiasy są wymagane ze względu na sposób działania analizatora składni. Eval nie jest zły, gdy jest używany na danych, nad którymi masz kontrolę. Aby uzyskać więcej informacji na temat różnicy między JSON.parse i eval (), zobacz JSON.parse vs. eval ()
Coś takiego:
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>
var str = "{'a':1}";
str = str.replace(/'/g, '"')
obj = JSON.parse(str);
console.log(obj);
To rozwiązało problem.
{'a':"A'A"}stanie się{"a":"A"A"}
Używanie apostrofów jako kluczy nie jest dozwolone w formacie JSON. Musisz użyć podwójnych cudzysłowów.
W twoim przypadku byłoby to najłatwiejsze rozwiązanie:
str = '{"a":1}';
Źródło :
Jeśli właściwość wymaga cudzysłowów, należy użyć cudzysłowów. Wszystkie nazwy właściwości należy ująć w podwójne cudzysłowy.
json = ( new Function("return " + jsonString) )();
Functionzamiast eval jest dźwięk, ale wszystko inne jest złe. Powinno byćvar json = Function("'use strict';return " + jsonString)()