Разбор строки как 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) )();