目錄javascript
使用JavaScript格式化json數據。須要引入jQuery庫。代碼簡單易懂,主要思想是遞歸,由於每層的數據格式都是同樣的。java
function jsonFormat(txt, tiperror, compress/*是否爲壓縮模式*/) {/* 格式化JSON源碼(對象轉換爲JSON文本) */ var indentChar = ' '; if (/^\s*$/.test(txt)) { if (tiperror) alert('數據爲空,沒法格式化! '); return; } // 替換\r\n 換行 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 ? '' : '\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.replace(/\"/gm, '\\"'); // 替換\r\n 換行 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(''); }