jQuery.parseJSON одинарна лапка проти подвійна лапка


75

Яка насправді різниця між цим?

Це чудово працює:

var obj1 = jQuery.parseJSON('{"orderedList": "true"}');
document.write("obj1 "+ obj1.orderedList );

але наступне не працює:

var obj2 = jQuery.parseJSON("{'orderedList': 'true'}");
document.write("obj2 "+ obj2.orderedList );

Чому так?


Кілька пов’язаних дописів тут і тут .
RBT

Відповіді:


106

Це тому, що подвійні лапки вважаються стандартними, а одинарні - ні. Це насправді не специфічно для JQuery, але це стосується стандарту JSON . Тож незалежно від набору інструментів JS, слід очікувати такої самої поведінки.

Значенням може бути рядок у подвійних лапках, або число, або true, або false, або null, або об’єкт, або масив. Ці структури можуть бути вкладеними.

Оновлення

Або, можливо, це дублікат одинарної лапки jQuery у відповіді JSON


25

Відповідно до документації API, подвійні лапки вважаються дійсними JSON, одинарні лапки - ні.

http://api.jquery.com/jQuery.parseJSON/


1
Я поручуся за цю відповідь. Але залишається одне питання: навіщо подвійні лапки? Я можу лише припустити, що вони вибрали подвійні лапки, оскільки в мовах програмування частіше використовують подвійні лапки для рядків. У деяких мовах одинарні лапки використовуються для однобайтових символів, а не для рядків.
Тім С.

3
@Tim - див. Відповідь Ck нижче ... Крім того, зауважте, що всередині рядка ви частіше використовуєте апостроф / одинарну лапку, ніж подвійну, тому з подвійними лапками для розмежування рядків, швидше за все, буде легше працювати.
Девід М

2
Причини, що лежать в основі tools.ietf.org/html/rfc4627, я не знаю. Але саме RFC є причиною того, чому jQuery вибрав подвійні лапки.
user625488

4

Йти до веб-сайт www.Jsonlint.com і перевірте свої одинарні лапки json рядок, і ви виявите, що це не дійсний json рядок. Оскільки подвійні лапки json - це стандартний формат json.

jsonlint.com - це веб-сайт, який перевіряє правильність формату json чи ні.


2

Ви можете скористатися заміною, щоб виправити це. Це спрацювало для мене.

var str = "{'orderedList': 'true'}";

str = str.replace(/\'/g, '\"');

JSON.parse(str);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.