Аналог PHP функции serialize() для JavaScript
Сериализирует данные, то есть представляет их в виде строки, которую можно сохранить в файле или, например, в базе данных. Функцию удобно использовать для хранения массивов данных.
function serialize(mixed_value) { var _getType = function(inp) { var type = typeof inp, match; var key; if(type == 'object' && !inp) { return 'null'; } if(type == 'object') { if(!inp.constructor) { return 'object'; } var cons = inp.constructor.toString(); if(match = cons.match(/(\w+)\(/)) { cons = match[1].toLowerCase(); } var types = ['boolean', 'number', 'string', 'array']; for(key in types) { if(cons == types[key]) { type = types[key]; break; } } } return type; }; var type = _getType(mixed_value); var val, ktype = ''; switch(type) { case 'function': val = ''; break; case 'undefined': val = 'N'; break; case 'boolean': val = 'b:' + (mixed_value ? '1' : '0'); break; case 'number': val = (Math.round(mixed_value) == mixed_value ? 'i' : 'd') + ':' + mixed_value; break; case 'string': val = 's:' + get_length(mixed_value) + ':"' + mixed_value + '"'; break; case 'array': case 'object': val = 'a'; var count = 0; var vals = ''; var okey; var key; for(key in mixed_value) { ktype = _getType(mixed_value[key]); if(ktype == 'function') { continue; } okey = (key.match(/^[0-9]+$/) ? parseInt(key) : key); vals += serialize(okey) + serialize(mixed_value[key]); count++; } val += ':' + count + ':{' + vals + '}'; break; } if(type != 'object' && type != 'array') val += ';'; return val; } function get_length(val){ var counter = 0; for(i=0;val.length>i;i++) if(/[абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ]/.test(val[i])) { counter += 2; } else { counter++; } return counter; }
Внимание! Все действия, описанные выше, вы выполняете на свой страх и риск. Автор не несет никакой ответственности за любой вред, причиненный пользователю или третьим лицам в результате использования материалов, программного обеспечения и другой информации, размещенной на данной странице.
Полезно? Поддержите! Это мотивирует автора к дальнейшим публикациям.
Обсуждение