Разбор строки как JSON с одинарными кавычками?
У меня есть строка
str = "{'a':1}";
JSON.parse(str);
VM514:1 Uncaught SyntaxError: Unexpected token '(…)
Как я могу разобрать выше строки (str) на JSON? Это похоже на простой синтаксический анализ; он не работает каким-то образом.
Ответы
Ответ 1
стандарт JSON требует двойных кавычек и не будет принимать одинарные кавычки и не будет синтаксический анализатор.
Если у вас простой случай без каких-либо одиночных кавычек в ваших строках (что, как правило, невозможно, но это не JSON), вы можете просто str.replace(/'/g, '"')
, и вы должны получить действительный JSON.
Ответ 2
Я знаю это старый пост, но вы можете использовать JSON5 для этой цели.
<script src="json5.js"></script>
<script>JSON.stringify(JSON5.parse('{a:1}'))</script>
Ответ 3
Если вы уверены, что ваш JSON находится в безопасности под вашим контролем (не пользовательский ввод), вы можете просто оценить JSON. Eval принимает все типы кавычек, а также имена свойств без кавычек.
var str = "{'a':1}";
var myObject = eval('(' + str + ')');
Дополнительные скобки требуются из-за того, как работает анализатор eval. Eval не является злом, когда он используется на данных, которые вы контролируете. Для получения дополнительной информации о разнице между JSON.parse и eval() см. JSON.parse и eval().
Ответ 4
Что-то вроде этого:
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>
Ответ 5
Использование одинарных кавычек для ключей не допускается в JSON. Вам нужно использовать двойные кавычки.
Для вашего варианта использования, возможно, это было бы самым простым решением:
str = '{"a":1}';
Источник:
Если для свойства требуются кавычки, необходимо использовать двойные кавычки. Все имена свойств должны быть заключены в двойные кавычки.
Ответ 6
var str = "{'a':1}";
str = str.replace(/'/g, '"')
obj = JSON.parse(str);
console.log(obj);
Это решило проблему для меня.
Ответ 7
json = ( new Function("return " + jsonString) )();