$ .parseJSON () возвращает значение NULL для действительного объекта - PullRequest
5 голосов
/ 26 декабря 2011

jsfiddle link

var x = {
    "Item1" : 1,
    "Item2" : {
        "Item3" : 3
    }
}

   alert(JSON.stringify(x, undefined, 2));
   alert($.parseJSON(x));

Первый предупреждает действительный объект. Второй предупреждает ноль. В реальном коде переменная «x» может быть строкой или объектом, поэтому я должен иметь возможность анализировать оба типа. Я что-то упустил?

Ответы [ 2 ]

9 голосов
/ 26 декабря 2011

Вы анализируете объект. Вы разбираете строки, а не объекты; jQuery.parseJSON принимает только строки. Из документации:

jQuery.parseJSON (json)
json
Строка JSON для анализа.

Использование:

if (! window.console) {
    console = {
        log: function (msg) {
            alert(msg);
        }
    };
}

console.log($.parseJSON(JSON.stringify(x, undefined, 2)));

Стандартный jQuery, похоже, не имеет строкового спецификатора JSON. Как правило, jQuery справляется с этим, так что в этом нет необходимости. Если вам это нужно, есть различные плагины.

2 голосов
/ 26 декабря 2011

Попробуйте это:

var x = { "Item1" : 1, "Item2" : { "Item3" : 3 }};
var stringified = JSON.stringify(x, undefined, 2);
var objectified = $.parseJSON(stringified);

alert(stringified);
alert(objectified.Item1);
alert(JSON.stringify(objectified, undefined, 2););

Как упоминалось выше, это даст парсеру строку для анализа в объект, а не в сам объект.

Вот скрипка: http://jsfiddle.net/uaN8G/

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