У мене є струна
str = "{'a':1}";
JSON.parse(str);
VM514:1 Uncaught SyntaxError: Unexpected token '(…)
Як я можу проаналізувати наведений вище рядок (str) на об’єкт JSON?
Це здається простим розбором. Однак це не працює.
У мене є струна
str = "{'a':1}";
JSON.parse(str);
VM514:1 Uncaught SyntaxError: Unexpected token '(…)
Як я можу проаналізувати наведений вище рядок (str) на об’єкт JSON?
Це здається простим розбором. Однак це не працює.
var str = "bad example";це не є доброю практикою, краще зробіть наступне: var str = 'good example';=> ось так, у вас не буде проблем з JSON, і у вас також не буде проблем з HTML. :)
Відповіді:
Стандарт JSON вимагає подвійних лапок і не приймає одинарних лапок, а також парсер.
Якщо у вас є простий випадок, де у ваших рядках немає екранованих одинарних лапок (що, як правило, було б неможливо, але це не JSON), ви можете зробити це просто, str.replace(/'/g, '"')і ви повинні отримати дійсний JSON.
'title': "Mama's Friend", стане "title": "Mama"s Friend", що, звичайно, є недійсним! Я повинен проголосувати за вашу відповідь, але я проти. Цей коментар коштує набагато більше.
Я знаю, що це стара публікація, але для цього ви можете використовувати JSON5 .
<script src="json5.js"></script>
<script>JSON.stringify(JSON5.parse('{a:1}'))</script>
{'section': "24'"} котрий стає: {"section": "24""} і не розбере.
<script>JSON.stringify(some_jsonString)</script>
Якщо ви впевнені, що ваш JSON надійно перебуває під вашим контролем (а не введенням користувача), ви можете просто оцінити JSON. Eval приймає всі типи пропозицій, а також назви властивостей без котирувань.
var str = "{'a':1}";
var myObject = (0, eval)('(' + str + ')');
Додаткові дужки потрібні через те, як працює парсер eval. Eval не є злом, коли він використовується на даних, якими ви контролюєте. Детальніше про різницю між JSON.parse та eval () див. У розділі JSON.parse проти eval ()
Щось на зразок цього:
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);
Це вирішило проблему для мене.
{'a':"A'A"}стане{"a":"A"A"}
Використання одинарних лапок для ключів заборонено в JSON. Вам потрібно використовувати подвійні лапки.
Для вашого випадку використання, можливо, це було б найпростішим рішенням:
str = '{"a":1}';
Джерело :
Якщо для властивості потрібні лапки, слід використовувати подвійні лапки. Усі назви властивостей повинні бути оточені подвійними лапками.
json = ( new Function("return " + jsonString) )();
Functionзамість eval є звук, але все інше - неправильно. Має бутиvar json = Function("'use strict';return " + jsonString)()