index.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. function format(txt, compress /*是否为压缩模式*/ ) { /* 格式化JSON源码(对象转换为JSON文本) */
  2. var indentChar = ' ';
  3. if(Object.prototype.toString.call(txt) === '[object Object]'){
  4. txt = JSON.stringify(txt);
  5. }
  6. if (/^\s*$/.test(txt)) {
  7. format.error ('数据为空,无法格式化! ');
  8. return null;
  9. }
  10. try {
  11. var data = eval('(' + txt + ')');
  12. } catch (e) {
  13. format.error ('数据源语法错误,格式化失败! 错误信息: ' + e.description, 'err');
  14. return null;
  15. };
  16. var draw = [],
  17. last = false,
  18. This = this,
  19. line = compress ?
  20. '' :
  21. '\n',
  22. nodeCount = 0,
  23. maxDepth = 0;
  24. var notify = function (name, value, isLast, indent, formObj) { /*indent缩进*/
  25. nodeCount++; /*节点计数*/
  26. for (var i = 0, tab = ''; i < indent; i++)
  27. tab += indentChar;
  28. /* 缩进HTML */
  29. tab = compress ?
  30. '' :
  31. tab; /*压缩模式忽略缩进*/
  32. maxDepth = ++indent; /*缩进递增并记录*/
  33. if (value && value.constructor == Array) { /*处理数组*/
  34. draw.push(tab + (formObj ?
  35. ('"' + name + '":') :
  36. '') + '[' + line); /*缩进'[' 然后换行*/
  37. for (var i = 0; i < value.length; i++)
  38. notify(i, value[i], i == value.length - 1, indent, false);
  39. draw.push(tab + ']' + (isLast ?
  40. line :
  41. (',' + line))); /*缩进']'换行,若非尾元素则添加逗号*/
  42. } else if (value && typeof value == 'object') { /*处理对象*/
  43. draw.push(tab + (formObj ?
  44. ('"' + name + '":') :
  45. '') + '{' + line); /*缩进'{' 然后换行*/
  46. var len = 0,
  47. i = 0;
  48. for (var key in value)
  49. len++;
  50. for (var key in value)
  51. notify(key, value[key], ++i == len, indent, true);
  52. draw.push(tab + '}' + (isLast ?
  53. line :
  54. (',' + line))); /*缩进'}'换行,若非尾元素则添加逗号*/
  55. } else {
  56. if (typeof value == 'string')
  57. value = '"' + value + '"';
  58. draw.push(tab + (formObj
  59. ?('"' + name + '":')
  60. :'') + value + (
  61. isLast
  62. ?''
  63. :','
  64. ) + line);
  65. };
  66. };
  67. var isLast = true,
  68. indent = 0;
  69. notify('', data, isLast, indent, false);
  70. return draw.join('');
  71. }
  72. format.error = function(message){
  73. return message;
  74. }
  75. module.exports = format;
  76. // tab = 4 tab = ?/number
  77. // txt string/Obj
  78. // deCode/enCode