js-格式化json
2019-01-02 本文已影响2人
墨_梵
js格式化json
- 方法一(格式化或压缩JSON)
function format(txt, compress) {
var indentChar = ' ';
if (/^\s*$/.test(txt)) {
console.log('数据为空,无法格式化! ');
return;
}
try {
var data = eval('(' + txt + ')');
} catch (e) {
console.log('数据源语法错误,格式化失败! 错误信息: ' + e.description, 'err');
return;
}
var draw = [],
last = false,
This = this,
line = compress ? '' : '\n',
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字符串
- 方法二(格式化JSON)
var formatJson = function (json, options) {
var reg = null,
formatted = '',
pad = 0,
PADDING = ' ';
options = options || {};
options.newlineAfterColonIfBeforeBraceOrBracket = (options.newlineAfterColonIfBeforeBraceOrBracket === true) ? true : false;
options.spaceAfterColon = (options.spaceAfterColon === false) ? false : true;
if (typeof json !== 'string') {
json = JSON.stringify(json);
} else {
json = JSON.parse(json);
json = JSON.stringify(json);
}
reg = /([\{\}])/g;
json = json.replace(reg, '\r\n$1\r\n');
reg = /([\[\]])/g;
json = json.replace(reg, '\r\n$1\r\n');
reg = /(\,)/g;
json = json.replace(reg, '$1\r\n');
reg = /(\r\n\r\n)/g;
json = json.replace(reg, '\r\n');
reg = /\r\n\,/g;
json = json.replace(reg, ',');
if (!options.newlineAfterColonIfBeforeBraceOrBracket) {
reg = /\:\r\n\{/g;
json = json.replace(reg, ':{');
reg = /\:\r\n\[/g;
json = json.replace(reg, ':[');
}
if (options.spaceAfterColon) {
reg = /\:/g;
json = json.replace(reg, ':');
}
(json.split('\r\n')).forEach(function (node, index) {
var i = 0,
indent = 0,
padding = '';
if (node.match(/\{$/) || node.match(/\[$/)) {
indent = 1;
} else if (node.match(/\}/) || node.match(/\]/)) {
if (pad !== 0) {
pad -= 1;
}
} else {
indent = 0;
}
for (i = 0; i < pad; i++) {
padding += PADDING;
}
if(node == "") {
formatted += padding + node + '\r\n';
}
pad += indent;
}
);
return formatted;
};
- 使用
var jsonObj = {
"name":"bxd"
}
formatJson(jsonObj); // 格式化json