понедельник, 2 апреля 2012 г.

JSON.stringify() для IE 7

Наш любимый IE7 не предоставляет метода JSON.stringify(). IE8 с JSON уже работает, а вот IE7 - никак нет. Со сторонними библиотеками я не работаю, поэтому все грабли приходится обходить вручную.

Нашла отличную статью о том, как победить IE7:
Cross-browser JSON Serialization in JavaScript

С точки зрения безопасности простенький JSON.parse() из этой статьи - не лучшее решение. Я в данный момент использую только JSON.stringify(), parse мне не нужен.

На случай, если оригинальная статья пропадет, копирую оттуда код для JSON.stringify() и JSON.parse().

var JSON = JSON || {};

// implement JSON.stringify serialization
JSON.stringify = JSON.stringify || function (obj) {
var t = typeof (obj);
if (t != "object" || obj === null) {
// simple data type
if (t == "string") obj = '"'+obj+'"';
return String(obj);
}
else {
// recurse array or object
var n, v, json = [], arr = (obj && obj.constructor == Array);
for (n in obj) {
v = obj[n]; t = typeof(v);
if (t == "string") v = '"'+v+'"';
else if (t == "object" && v !== null) v = JSON.stringify(v);
json.push((arr ? "" : '"' + n + '":') + String(v));
}
return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
}
};

// implement JSON.parse de-serialization
JSON.parse = JSON.parse || function (str) {
if (str === "") str = '""';
eval("var p=" + str + ";");
return p;
};

11 комментариев:

  1. Почему просто не подключить библиотек json??? я так делал просто интересуюсь? почему вы сделали так?

    ОтветитьУдалить
    Ответы
    1. А зачем мне подключать целую библиотеку ради одной единственной функции?!
      Чтобы избежать подобных вопросов, я вначале поста специально уточнила, что со сторонними библиотеками не работаю. Странно, что вы вообще попали на этот пост, если пользуетесь библиотекой json.

      Удалить
  2. да я случайно сюда попал

    ОтветитьУдалить