Js格式化json字符串

var formatJson = function(json, options) {
    var reg = null,
        formatted = '',
        pad = 0,
        PADDING = '    '; // one can also use '	' or a different number of spaces
  
    // optional settings
    options = options || {};
    // remove newline where '{' or '[' follows ':'
    options.newlineAfterColonIfBeforeBraceOrBracket = (options.newlineAfterColonIfBeforeBraceOrBracket === true) ? true : false;
    // use a space after a colon
    options.spaceAfterColon = (options.spaceAfterColon === false) ? false : true;
  
    // begin formatting...
    if (typeof json !== 'string') {
        // make sure we start with the JSON as a string
        json = JSON.stringify(json);
    } else {
        // is already a string, so parse and re-stringify in order to remove extra whitespace
        json = JSON.parse(json);
        json = JSON.stringify(json);
    }
  
    // add newline before and after curly braces
    reg = /([{}])/g;
    json = json.replace(reg, '
$1
');
  
    // add newline before and after square brackets
    reg = /([[]])/g;
    json = json.replace(reg, '
$1
');
  
    // add newline after comma
    reg = /(\,)/g;
    json = json.replace(reg, '$1
');
  
    // remove multiple newlines
    reg = /(

)/g;
    json = json.replace(reg, '
');
  
    // remove newlines before commas
    reg = /
\,/g;
    json = json.replace(reg, ',');
  
    // optional formatting...
    if (!options.newlineAfterColonIfBeforeBraceOrBracket) {        
        reg = /:
{/g;
        json = json.replace(reg, ':{');
        reg = /:
[/g;
        json = json.replace(reg, ':[');
    }
    if (options.spaceAfterColon) {         
        reg = /:/g;
        json = json.replace(reg, ': ');
    }
  
    $.each(json.split('
'), function(index, node) {
        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;
        }
  
        formatted += padding + node + '
';
        pad += indent;
    });
  
    return formatted;
};

var str1 = '{ "name": "xiaol", "sex": "man" }'; 

formatJson(str1)

{
  "name": "xiaol",
  "sex": "man"
}

原文地址:https://www.cnblogs.com/413xiaol/p/6771194.html