zoukankan      html  css  js  c++  java
  • 手写js代码格式化json数据

    手写js代码格式化json数据

    使用JavaScript格式化json数据。需要引入jQuery库。代码简单易懂,主要思想是递归,因为每层的数据格式都是一样的。

    function jsonFormat(txt, tiperror, compress/*是否为压缩模式*/) {/* 格式化JSON源码(对象转换为JSON文本) */
    	var indentChar = '    ';
    	if (/^s*$/.test(txt)) {
    		if (tiperror)
    			alert('数据为空,无法格式化! ');
    		return;
    	}
    	// 替换
     换行
    	txt=txt.replace(/\r/g,"CRAPAPI_R"); 
        txt=txt.replace(/\n/g,"CRAPAPI_N"); 
        txt=txt.replace(/\t/g,"CRAPAPI_T"); 
    	var data;
    	try {
    		data=$.parseJSON(txt);
    	} catch (e) {
    		if (tiperror)
    			alert('数据源语法错误,格式化失败! 错误信息: ' + e.description, 'err');
    		return;
    	}
    	;
    	var draw = [], last = false, This = this, line = compress ? '' : '
    ', nodeCount = 0, maxDepth = 0;
    
    	var notify = function(name, value, isLast, indent/*缩进*/, formObj) {
    		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.replace(/"/gm, '\"');
    				// 替换
     换行
    				value=value.replace(/CRAPAPI_R/g,"\r"); 
      				value=value.replace(/CRAPAPI_N/g,"\n"); 
      				value=value.replace(/CRAPAPI_T/g,"\t"); 
    
    				value = '"' + value + '"';
    			}
    			draw.push(tab + (formObj ? ('"' + name + '":') : '') + value
    					+ (isLast ? '' : ',') + line);
    		}
    		;
    	};
    	var isLast = true, indent = 0;
    	notify('', data, isLast, indent, false);
    	return draw.join('');
    }
    
  • 相关阅读:
    Mybatis各种模糊查询
    ORACLE查询当前资产状态,和另一个数据库联查,(查询重复数据中第一条),子查询作为字段查询
    驱动文件操作
    驱动开发中使用安全字符串函数
    驱动开发 判断内存是否可读 可写
    驱动模式使用__try __excpet
    简单解释Windows如何使用FS段寄存器
    手动载入NT驱动
    PUSHA/PUSHAD
    跳转指令公式计算 HOOK
  • 原文地址:https://www.cnblogs.com/zhijiancanxue/p/12507729.html
Copyright © 2011-2022 走看看