1. // format json obj string
  2. function format_json(txt, compress) {
  3. var indentChar = '    ';
  4. if (/^\s*$/.test(txt)) {
  5. //alert('txt is empty');
  6. return '';
  7. }
  8. try {
  9. var data = eval('(' + txt + ')');
  10. txt = txt.replace(new RegExp("\"{","gm"), "{").replace(new RegExp("}\"","gm"), "}");
  11. txt = txt.replace(new RegExp("\\\\\\\"","gm"), "\"");
  12. txt = txt.replace(new RegExp("\\\\\\\"","gm"), "\"");
  13. txt = txt.replace(new RegExp("\\\\\\\"","gm"), "\"");
  14.  
  15. txt = txt.replace(new RegExp(" ","gm"), "");
  16.  
  17. // console.log(txt);
  18. data = eval('(' + txt + ')');
  19. } catch (e) {
  20. //alert('txt format error: '+e.description,'err');
  21. return txt;
  22. }
  23. ;
  24. var draw = [], last = false, This = this, line = compress ? ''
  25. : '<br/>', nodeCount = 0, maxDepth = 0;
  26. var notify = function(name, value, isLast, indent, formObj) {
  27. if (indent == 0) {
  28. //draw.push('<table>');
  29. }
  30. nodeCount++;
  31. for (var i = 0, tab = ''; i < indent; i++)
  32. tab += indentChar;
  33. tab = compress ? '' : tab;
  34. maxDepth = ++indent;
  35. if (value && value.constructor == Array) {
  36. draw.push(tab + (formObj ? ('"' + name + '":') : '') + '['
  37. + line);
  38. for (var i = 0; i < value.length; i++)
  39. notify(i, value[i], i == value.length - 1, indent,
  40. false);
  41. draw.push(tab + ']' + (isLast ? line : (',' + line)));
  42. } else if (value && typeof value == 'object') {
  43. draw.push(tab + (formObj ? ('"' + name + '":') : '') + '{'
  44. + line);
  45. var len = 0, i = 0;
  46. for ( var key in value)
  47. len++;
  48. for ( var key in value)
  49. notify(key, value[key], ++i == len, indent, true);
  50. draw.push(tab + '}' + (isLast ? line : (',' + line)));
  51. } else {
  52. if (typeof value == 'string')
  53. value = '"' + value + '"';
  54. draw.push(tab + (formObj ? ('"' + name + '":') : '')
  55. + value + (isLast ? '' : ',') + line);
  56. }
  57. ;
  58. };
  59. var isLast = true, indent = 0;
  60.  
  61. notify('', data, isLast, indent, false);
  62. return draw.join('');
  63. }
  64.  
  65. function addIndentBlank(indent) {
  66. indentChar = '&nbsp;&nbsp;&nbsp;&nbsp;';
  67. var ret = "";
  68. for (var i = 0; i < indent; i++) {
  69. ret += indentChar;
  70. }
  71. return ret;
  72. }
  73.  
  74. // format all string
  75. function format_str(txt) {
  76. if (/^\s*$/.test(txt)) {
  77. //alert('txt is empty');
  78. return '';
  79. }
  80. try {
  81. //var data = eval('(' + txt + ')');
  82. txt = txt.replace(new RegExp("\"{","gm"), "{").replace(new RegExp("}\"","gm"), "}"); // "{->{ }"->}
  83. txt = txt.replace(new RegExp("\\\\\\\"","gm"), "\""); // \"->"
  84. txt = txt.replace(new RegExp("\\\\\\\"","gm"), "\"");
  85. txt = txt.replace(new RegExp("\\\\\\\"","gm"), "\"");
  86.  
  87. txt = txt.replace(new RegExp("\\\\\\\\r","gm"), "\\r");
  88. txt = txt.replace(new RegExp("\\\\\\\\n","gm"), "\\n");
  89. txt = txt.replace(new RegExp("\\\\\\\\r","gm"), "\\r");
  90. txt = txt.replace(new RegExp("\\\\\\\\n","gm"), "\\n");
  91. txt = txt.replace(new RegExp("\\\\\\\\r","gm"), "\\r");
  92. txt = txt.replace(new RegExp("\\\\\\\\n","gm"), "\\n");
  93.  
  94. //txt = txt.replace(new RegExp("&nbsp;","gm"), "");
  95.  
  96. var draw = [];
  97. var line = "<br/>";
  98. var indent = 0;
  99. var quoteCount = 0;
  100. var quoteOddEven = 0; // Even count quote(") to deal, Odd is string
  101. var containLeftBrace = false;
  102. var preChar = '';
  103. var nextChar = '';
  104. for (var i = 0; i < txt.length; i++) {
  105. current = txt.charAt(i);
  106. try {
  107. nextChar = txt.charAt(i + 1);
  108. } catch (e) {
  109. console.log(e);
  110. }
  111. switch (current) {
  112. case '{':
  113. containLeftBrace = true;
  114. case '[': {
  115. if (preChar == '\"') {
  116. draw.push(current);
  117. break;
  118. }
  119. if (quoteOddEven == 0) {
  120. ++indent;
  121. draw.push(current);
  122. draw.push(line);
  123. draw.push(addIndentBlank(indent));
  124. break;
  125. } else {
  126. draw.push(current);
  127. break;
  128. }
  129. }
  130. case '}':
  131. case ']': {
  132. if (nextChar == '\"') {
  133. draw.push(current);
  134. break;
  135. }
  136. if (quoteOddEven == 0) {
  137. --indent;
  138. draw.push(line);
  139. draw.push(addIndentBlank(indent));
  140. draw.push(current);
  141. break;
  142. } else {
  143. draw.push(current);
  144. break;
  145. }
  146. }
  147. case ',': {
  148. if (quoteOddEven == 0 && quoteCount > 0 && containLeftBrace) {
  149. draw.push(current);
  150. draw.push(line);
  151. draw.push(addIndentBlank(indent));
  152. break;
  153. } else {
  154. draw.push(current);
  155. break;
  156. }
  157. }
  158. case '\\': {
  159. try {
  160. next1 = txt.charAt(i+1);
  161. next2 = txt.charAt(i+2);
  162. next3 = txt.charAt(i+3);
  163. // console.log(current + next1 + next2 + next3);
  164. if ((next1 + "") == "r" && (current + next1 + next2 + next3) == "\\r\\n") {
  165. draw.push(line);
  166. draw.push(addIndentBlank(indent + 1));
  167. i = i+3;
  168. }
  169. } catch(e) {
  170. console.log(e);
  171. }
  172. break;
  173. }
  174. case '\"': {
  175. quoteCount = quoteCount + 1;
  176. quoteOddEven = (quoteOddEven + 1) % 2;
  177. draw.push(current);
  178. break;
  179. }
  180. default: {
  181. draw.push(current);
  182. }
  183. }
  184. preChar = current;
  185. }
  186.  
  187. // console.log('draw: ' + draw.join(''));
  188. } catch (e) {
  189. // alert('txt format error: '+e,'err');
  190. return txt;
  191. }
  192. ;
  193. return draw.join('');
  194. }

js/javascript format json(js/javascript 格式化json字符串)的更多相关文章

  1. 【Json】C#格式化JSON字符串

    很多时候我们需要将json字符串以 {     "status": 1,     "sum": 9 }这种方式显示,而从服务端取回来的时候往往是这样 {&quo ...

  2. vim调用python格式化json数据

    vim调用python格式化json数据 November 30, 2013GNU/Linuxpython3, Vimopenwares python有个标准模块叫json,用于编码/解码,序列化/按 ...

  3. 在JavaScript中使用json.js:Ajax项目之POST请求(异步)

    经常在百度搜索框输入一部分关键词后,弹出候选关键热词.现在我们就用Ajax技术来实现这一功能. 一.下载json.js文件 百度搜一下,最好到json官网下载,安全起见. 并与新建的两个文件部署如图 ...

  4. javascript、js操作json方法总结(json字符创转换json对象)

    相信前端的同学们对json并不陌生,接触过很多.但是很少人知道json的全称是什么,哈哈,我也是查资 料知道的.(JSON JavaScript Object Notation是一种轻量级的数据交换格 ...

  5. 在JavaScript中使用json.js:Ajax项目之GET请求(同步)

    1.用php编写一个提供数据的响应程序(phpdata.php) <?php $arr=array(1,2,3,4); //将数组编码为JSON格式的数据 $jsonarr=json_encod ...

  6. 在JavaScript中使用json.js:访问JSON编码的某个值

    演示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...

  7. 在JavaScript中使用json.js:使得js数组转为JSON编码

    在json的官网中下载json.js,然后在script中引入,以使用json.js提供的两个关键方法. 1.数组对象.toJSONString() 这个方法将返回一个JSON编码格式的字符串,用来表 ...

  8. JSON(JavaScript Object Notation, JS 对象标记)

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言 ...

  9. JavaScript中解析JSON --- json.js 、 json2.js 以及 json3.js的使用区别

    JSON官方(http://www.json.org/)提供了一个json.js,json.js是JSON官方提供的在JavaScript中解析JSON的js包,json.js.json2.js.js ...

  10. JS 前端格式化JSON字符串工具

    JSON格式化工具,简易实现.作为技术宅,直接上代码,供大家使用.前提:一定要引入jquery哦. <!DOCTYPE html> <html lang="en" ...

随机推荐

  1. IE浏览器下异步请求的缓存问题

    问题: 在做即时通讯时,需要提示用户有几条未读的提醒,这个是(如果有新的提示消息立马在浏览器无刷新提示)即时获取的.但我们的做法是,当用户点击未读信息进入到信息显示页面时重新获取下未读的提醒:但是在I ...

  2. WinForm 进程、线程、TreeView递归加载、发送邮件--2016年12月13日

    进程:一个程序就是一个进程,但是也有一个程序需要多个进程来支持的情况 进程要使用的类是:Process它在命名空间:System.Diagnostics; 静态方法Start(); Process.S ...

  3. C语言 回文

    #include <stdio.h> #include <string.h> int main() { ]; int i,j; printf("Please inpu ...

  4. socket泄露的问题

    在增加keepalive和libevent 超时后,仍然会几个月后出现lsof统计句柄过多的问题,如下图,红线圈定的是不定期出现的错误关闭流,时间点和server端日志(只看到accpet fd,没有 ...

  5. OpenLayers.2.10.Beginners.Guide---第一章

    从网上下载openlayers2,解压取得img theme 文件夹和openlayes.js文件.放在同一文件夹下用phpstorm打开. 创建index.html-------------每一行都 ...

  6. Dcloud HTML5 监听蓝牙设备 调用 原生安卓实现

    最近一直搞Dcloud ,这是HTML5版本的开发,打包时候,可以打包成 apk 和ipa 分别运行在安卓和ios 机器上面, 但是这里面的资料很少,遇到问题,之后只能自己钻研总结, 现在有这么一个需 ...

  7. Oracle入门基础

    使用SQLplus工具登录连接 开始->运行CMD-> C:\Users\Admininstrator> sqlplus 请输入用户名:sys@orcl as sysdba 输入口令 ...

  8. Flashback Data Archive ( Oracle Total Recall ) introduced in 11g

    Flashback Data Archive feature is part of Oracle Total Recall technology. Flashback Data Archive fea ...

  9. RAC+asm通过rman恢复到单实例+asm

    1.恢复参数文件,并修改参数文件 参数文件指名几个最简单的就行,我的参数文件如下: 2.恢复控制文件,并启动数据库到mount 如果是把备份集从别的服务器拷贝到本地恢复的服务器的目录,使用下面的语句指 ...

  10. Oracle REGEXP_SUBSTR()

    REGEXP_SUBSTR函数格式如下: function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)       _ ...