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.
javascript
json
Coderaemon
źródło
źródło
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.źródło
'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>
źródło
{'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 ()
źródło
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>
źródło
var str = "{'a':1}"; str = str.replace(/'/g, '"') obj = JSON.parse(str); console.log(obj);
To rozwiązało problem.
źródło
{'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 :
źródło
json = ( new Function("return " + jsonString) )();
źródło
Function
zamiast eval jest dźwięk, ale wszystko inne jest złe. Powinno byćvar json = Function("'use strict';return " + jsonString)()