2014-11-17 3 views
0

Мне нужна функция, которая может сериализовать объект типа {"a": "val", "b": {}, "c": [{}]} без JSON.stringify (вызывать среду просто не имеет объекта JSON) или с использованием jquery и любой другой библиотеки. Код ниже является то, что у меня есть на данный момент:Функция сериализации объекта Javascript

function objToString(obj) { 
    if (obj == null) return null; 
    var index = 0; 
    var str = '{'; 
    for (var p in obj) { 
     if (obj.hasOwnProperty(p)) { 
      str += index != 0 ? "," : ""; 
      str += '"' + p + '":' + (typeof (obj[p]) == 'object' ? objToString(obj[p]) : itemToJsonItem(obj[p])); 
      index++; 
     } 
    } 
    str += "}"; 
    return str; 
} 

function itemToJsonItem(item) { 
    return isNaN(item) ? '"' + item + '"' : item; 
} 

Эта функция может иметь дело с объектами, вложенными объектами, но не с массивами. Узел «c» из упомянутого объекта будет выглядеть как «c»: {«0»: {...}}, а не как массив. Неудивительно, что «c» .constructor === Массив неверен, потому что он интерпретируется как функция, а не как массив. Это полный код, где вы можете видеть, что происходит.

<div id="div_result"></div> 

<script> 
    var test = { "a": "val", "b": [{"c":"val c"}]}; 

    function objToString(obj) { 
     if (obj == null) return null; 
     var index = 0; 
     var str = '{'; 
     for (var p in obj) { 
      if (obj.hasOwnProperty(p)) { 
       str += index != 0 ? "," : ""; 
       str += '"' + p + '":' + (typeof (obj[p]) == 'object' ? objToString(obj[p]) : itemToJsonItem(obj[p])); 
       index++; 
      } 
     } 
     str += "}"; 
     return str; 
    } 

    function itemToJsonItem(item) { 
     return isNaN(item) ? '"' + item + '"' : item; 
    } 

    document.getElementById("div_result").innerHTML = objToString(test); 
</script> 

Я действительно ценю помощь, в этот момент сериализовать объект, созданный функцией toSerialize внутри каждого объекта, но мы хотим сделать его пределами стандартной функции.

+2

Добавление некоторого обоснования, почему 'JSON.stringify' не является ответом, должен помочь дать вам более полезные ответы. – Amadan

+0

Спасибо за совет, я сделал это. Надеюсь, это поможет. – genichm

+4

Можете ли вы использовать [это вместо этого] (https://github.com/douglascrockford/JSON-js)? –

ответ

3

Попробуйте использовать JSON 3. Это полиполная библиотека для window.JSON. Он предоставляет методы JSON.stringify и JSON.parse.

Смежные вопросы