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('');
    }
    
  • 相关阅读:
    Luogu P4205 [NOI2005]智慧珠游戏
    Luogu P3321 [SDOI2015]序列统计
    Luogu P2056 [ZJOI2007]捉迷藏
    Luogu P5168 xtq玩魔塔
    2019年一月刷题列表
    [转载]我们都是行走在镜面边缘的人
    [武汉加油] CF830C Bamboo Partition
    [武汉加油] [NOI Online 提高组]最小环
    [武汉加油] luogu P6178 【模板】Matrix-Tree 定理
    [武汉加油] bzoj 5099: [POI2018]Pionek 几何+双指针
  • 原文地址:https://www.cnblogs.com/zhijiancanxue/p/12507729.html
Copyright © 2011-2022 走看看