js实现json数据格式化及压缩

摘要:经常写代码就免不了与json这种轻量级的数据打交道,一般我们得到的json字符串是混乱的,计算机不在乎,再乱它都能认识,作为人类,虽然也能认识,但识读起来比较困难。

json作为常用数据文件,为了传输的效率,在传输前要进行压缩,而在传输后要进行格式化,以便阅读;下面是使用Js完成的格式化和压缩代码。

效果:



代码:

<script>
function format(txt, compress) { /*格式化JSON源码(对象转换为JSON文本,是否为压缩模式)*/
	var indentChar = ' ';
	if (/^\s*$/.test(txt)) {
		alert('数据为空,无法格式化! ');
		return;
	}
	try {
		var data = eval('(' + txt + ')');
	} catch (e) {
		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 + '"';
			draw.push(tab + (formObj ? ('"' + name + '":') : '') + value + (isLast ? '' : ',') + line);
		};
	};
	var isLast = true,
		indent = 0;
	notify('', data, isLast, indent, false);
	return draw.join('');
}
//使用format(json,true);表示压缩json字符串。format(json,false);表示格式化json字符串。

</script>


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_6654