Regex Bafflement в jQuery (1.5.2) - PullRequest
       1

Regex Bafflement в jQuery (1.5.2)

0 голосов
/ 18 апреля 2011

Я получаю «Неверный JSON» после выполнения запроса JQuery AJAX. Этот код запроса не важен, поэтому я решил его опустить.

Я углубился в библиотеку jQuery и удалил соответствующий код, который собран во фрагмент ниже.

Итак, учитывая, что мой запрос возвращает строку "{'x':'1'}", почему в процессе его обработки jQuery должен возвращать "{'x':']'}"?

//regex values stripped from jQuery 1.5.2.
var data  = "{'x':'1'}";
var rvalidchars = /^[\],:{}\s]*$/;
var rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
var rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
var rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g;

//test the various stages of data.replace from the jQuery library
alert (data.replace(rvalidescape, "@")); // {'x':'1'}"
alert (data.replace(rvalidescape, "@").replace(rvalidtokens, "]")); //{'x':']'}"
alert (data.replace(rvalidescape, "@").replace(rvalidtokens, "]").replace(rvalidbraces, "")); //{'x':']'}"

Вы можете увидеть это на этом JSFiddle

Более того, происходят следующие преобразования:

'{x:12}' --> '{x:]}'
'{"x":"12"}' --> '{],]}'

Я предполагаю, что кто-то мог бы объяснить мне, почему регулярное выражение делает это, но мне также любопытно, почему jQuery делает это.

Любая помощь будет высоко ценится

Ответы [ 2 ]

2 голосов
/ 18 апреля 2011

Судя по всему, jQuery заменяет все, что не является допустимым токеном JSON, на ']'. Некоторые вещи, такие как «null», «true», «false» и т. Д., Могут быть вставлены без кавычек. На самом деле, цифры тоже могут!

Ваш JSON недопустим, потому что вам нужно заключить в кавычки значения. Так что либо:

{"x": 1}

или

{"x": "1"}

должно работать. Ваш скопированный код все еще портит это, но выкидывание его через jQuery.parseJSON () прекрасно работает для меня.

1 голос
/ 18 апреля 2011

ваша строка JSON искажена в соответствии с: http://api.jquery.com/jQuery.parseJSON/

Вы должны использовать двойные кавычки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...