2012-05-23 3 views
1

У меня есть объект, который содержит массивы, который состоит из других массивов, он также содержит методы. Проблема, с которой я столкнулся, заключается в том, что я не могу использовать JSon из-за многомерных массивов и методов.Как преобразовать сложный объект javascript в строку и обратно

Причина, по которой я хочу преобразовать ее в строку, заключается в том, чтобы сохранить в локальном хранилище Iphone localStorage.

вы можете хранить только текст внутри, и я надеялся на способ хранения сложного объекта о пользователе в виде строки и возможность десериализации его снова после. Есть ли способ сделать это. Я не знаю javascript достаточно хорошо, чтобы написать свой собственный api. Это был вариант я начал пробовать и смотреть на в данный момент :(

+0

JSON может кодировать многомерные массивы, но не методы. – Pointy

+0

Вы используете JQuery? –

+0

Вы не можете просто сохранить сценарий .js, а затем попытаться выполнить eval() во время выполнения? Но я не знаю, действительно ли вы можете читать и выполнять с локального хранилища. – BigMike

ответ

2

Serialize его JSON. Вы можете сериализации/десериализации сложные объекты и массивы.

Там нет никакого способа, вы можете сериализовать методы (код) .

для локального хранения настойчивости я бы рекомендовал Lawnchair.

+0

, но не методы ... – Alnitak

+0

http://jsfiddle.net/mplungjan/8MzTV/ показывает мне метод ... – mplungjan

+0

@mplungjan yes, потому что 'alert()' делает неявный '. toString() 'для каждого аргумента. Сериализатор JSON откажется это сделать. – Alnitak

0

нет необходимости хранить в LocalStorage вы можете использовать глобальный массив где-либо в вашем приложении попробовать этот раз

+1

no Мне нужно localStorage, чтобы они могли выйти и вернуться к нему позже. объект содержит много вещей –

0

это нормально ро ssible сериализация метод с использованием myfunc.toString()

Таким образом, вы могли использовать replacer функцию в JSON.stringify() и JSON.parse() распознавать методы, и называют .toString() на них, и они каким-то образом распознать их на разборе и превратить их обратно в первые функции класса ,

Однако - обратите внимание, что реконструированная функция не будет иметь доступ к области действий исходного объекта, т.е. частным переменным или методы и т.д.

например,

function A() { 
    var foo = 'bar'; 
    this.test = function test() { console.log(foo) }; 
}; 

var b = new A(); 
var f = b.test.toString(); // the text of the method 
b.test2 = new Function(f); 

b.test2(); 
> undefined 
0

хорошо, есть способ для преобразования объекта с функциями в строку и тиски стих. взгляните на этот плагин:

http://www.eslinstructor.net/jsonfn/

удачи,

-Vadim

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