123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- function format(txt, compress /*是否为压缩模式*/ ) { /* 格式化JSON源码(对象转换为JSON文本) */
- var indentChar = ' ';
- if(Object.prototype.toString.call(txt) === '[object Object]'){
- txt = JSON.stringify(txt);
- }
- if (/^\s*$/.test(txt)) {
- format.error ('数据为空,无法格式化! ');
- return null;
- }
- try {
- var data = eval('(' + txt + ')');
- } catch (e) {
- format.error ('数据源语法错误,格式化失败! 错误信息: ' + e.description, 'err');
- return null;
- };
- var draw = [],
- last = false,
- This = this,
- line = compress ?
- '' :
- '\n',
- nodeCount = 0,
- maxDepth = 0;
- var notify = function (name, value, isLast, indent, formObj) { /*indent缩进*/
- nodeCount++; /*节点计数*/
- for (var i = 0, tab = ''; i < indent; i++)
- tab += indentChar;
- /* 缩进HTML */
- tab = compress ?
- '' :
- tab; /*压缩模式忽略缩进*/
- maxDepth = ++indent; /*缩进递增并记录*/
- if (value && value.constructor == Array) { /*处理数组*/
- draw.push(tab + (formObj ?
- ('"' + name + '":') :
- '') + '[' + line); /*缩进'[' 然后换行*/
- for (var i = 0; i < value.length; i++)
- notify(i, value[i], i == value.length - 1, indent, false);
- draw.push(tab + ']' + (isLast ?
- line :
- (',' + line))); /*缩进']'换行,若非尾元素则添加逗号*/
- } else if (value && typeof value == 'object') { /*处理对象*/
- draw.push(tab + (formObj ?
- ('"' + name + '":') :
- '') + '{' + line); /*缩进'{' 然后换行*/
- var len = 0,
- i = 0;
- for (var key in value)
- len++;
- for (var key in value)
- notify(key, value[key], ++i == len, indent, true);
- draw.push(tab + '}' + (isLast ?
- line :
- (',' + line))); /*缩进'}'换行,若非尾元素则添加逗号*/
- } else {
- if (typeof value == 'string')
- value = '"' + value + '"';
- draw.push(tab + (formObj
- ?('"' + name + '":')
- :'') + value + (
- isLast
- ?''
- :','
- ) + line);
- };
- };
- var isLast = true,
- indent = 0;
- notify('', data, isLast, indent, false);
- return draw.join('');
- }
- format.error = function(message){
- return message;
- }
- module.exports = format;
- // tab = 4 tab = ?/number
- // txt string/Obj
- // deCode/enCode
|