// format json obj string
function format_json(txt, compress) {
var indentChar = '    ';
if (/^\s*$/.test(txt)) {
//alert('txt is empty');
return '';
}
try {
var data = eval('(' + txt + ')');
txt = txt.replace(new RegExp("\"{","gm"), "{").replace(new RegExp("}\"","gm"), "}");
txt = txt.replace(new RegExp("\\\\\\\"","gm"), "\"");
txt = txt.replace(new RegExp("\\\\\\\"","gm"), "\"");
txt = txt.replace(new RegExp("\\\\\\\"","gm"), "\""); txt = txt.replace(new RegExp(" ","gm"), ""); // console.log(txt);
data = eval('(' + txt + ')');
} catch (e) {
//alert('txt format error: '+e.description,'err');
return txt;
}
;
var draw = [], last = false, This = this, line = compress ? ''
: '<br/>', nodeCount = 0, maxDepth = 0;
var notify = function(name, value, isLast, indent, formObj) {
if (indent == 0) {
//draw.push('<table>');
}
nodeCount++;
for (var i = 0, tab = ''; i < indent; i++)
tab += indentChar;
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('');
} function addIndentBlank(indent) {
indentChar = '&nbsp;&nbsp;&nbsp;&nbsp;';
var ret = "";
for (var i = 0; i < indent; i++) {
ret += indentChar;
}
return ret;
} // format all string
function format_str(txt) {
if (/^\s*$/.test(txt)) {
//alert('txt is empty');
return '';
}
try {
//var data = eval('(' + txt + ')');
txt = txt.replace(new RegExp("\"{","gm"), "{").replace(new RegExp("}\"","gm"), "}"); // "{->{ }"->}
txt = txt.replace(new RegExp("\\\\\\\"","gm"), "\""); // \"->"
txt = txt.replace(new RegExp("\\\\\\\"","gm"), "\"");
txt = txt.replace(new RegExp("\\\\\\\"","gm"), "\""); txt = txt.replace(new RegExp("\\\\\\\\r","gm"), "\\r");
txt = txt.replace(new RegExp("\\\\\\\\n","gm"), "\\n");
txt = txt.replace(new RegExp("\\\\\\\\r","gm"), "\\r");
txt = txt.replace(new RegExp("\\\\\\\\n","gm"), "\\n");
txt = txt.replace(new RegExp("\\\\\\\\r","gm"), "\\r");
txt = txt.replace(new RegExp("\\\\\\\\n","gm"), "\\n"); //txt = txt.replace(new RegExp("&nbsp;","gm"), ""); var draw = [];
var line = "<br/>";
var indent = 0;
var quoteCount = 0;
var quoteOddEven = 0; // Even count quote(") to deal, Odd is string
var containLeftBrace = false;
var preChar = '';
var nextChar = '';
for (var i = 0; i < txt.length; i++) {
current = txt.charAt(i);
try {
nextChar = txt.charAt(i + 1);
} catch (e) {
console.log(e);
}
switch (current) {
case '{':
containLeftBrace = true;
case '[': {
if (preChar == '\"') {
draw.push(current);
break;
}
if (quoteOddEven == 0) {
++indent;
draw.push(current);
draw.push(line);
draw.push(addIndentBlank(indent));
break;
} else {
draw.push(current);
break;
}
}
case '}':
case ']': {
if (nextChar == '\"') {
draw.push(current);
break;
}
if (quoteOddEven == 0) {
--indent;
draw.push(line);
draw.push(addIndentBlank(indent));
draw.push(current);
break;
} else {
draw.push(current);
break;
}
}
case ',': {
if (quoteOddEven == 0 && quoteCount > 0 && containLeftBrace) {
draw.push(current);
draw.push(line);
draw.push(addIndentBlank(indent));
break;
} else {
draw.push(current);
break;
}
}
case '\\': {
try {
next1 = txt.charAt(i+1);
next2 = txt.charAt(i+2);
next3 = txt.charAt(i+3);
// console.log(current + next1 + next2 + next3);
if ((next1 + "") == "r" && (current + next1 + next2 + next3) == "\\r\\n") {
draw.push(line);
draw.push(addIndentBlank(indent + 1));
i = i+3;
}
} catch(e) {
console.log(e);
}
break;
}
case '\"': {
quoteCount = quoteCount + 1;
quoteOddEven = (quoteOddEven + 1) % 2;
draw.push(current);
break;
}
default: {
draw.push(current);
}
}
preChar = current;
} // console.log('draw: ' + draw.join(''));
} catch (e) {
// alert('txt format error: '+e,'err');
return txt;
}
;
return draw.join('');
}

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. 【Kubernetes】K8S网络方案--最近在看的

    K8S网络-最近在看的 Create a Minikube cluster - Kubernetes Kubernetes Documentation - Kubernetes Kubernetes ...

  2. Visual Studio 2015中创建C#的Android项目提示"Value cannot be null"的解决方法

    由于之前本机已安装过Android SDK,在安装Visual Studio 2015时跳过了,并没有为Xamarin指定对应路径导致.Visual Studio顶部菜单:Tools > Opt ...

  3. sort()基础知识总结+超简短的英文名排序写法

    结合前些天学的箭头函数我想到一种非常简短的sort排序写法:(这可能是最短的英文名排序方法了) 贴出来大家一起探讨一下: [4,1,2,32].sort((x,y)=>x>y); //[1 ...

  4. JSP复习整理(五)JavaBean使用表单处理数据

    一.先建立用户输入的数据 usingGetparameter.html <!DOCTYPE html> <html> <head> <meta charset ...

  5. 修改NavigationView中的Item的Icon大小

    <dimen name="navigation_icon_size">48dp</dimen>

  6. quertz 使用小例

    最近工作中用了个任务调度,学的不好,就把它记下来,为了以后参考 一般的 quartz都允许有一个名为quartz.properties的配置文件,通过它可以修改quartz框架运行时的环境: Quar ...

  7. 数据复制与AA双活(1)

    最开始有些概念需要弄明白: 1. 什么是RPO? Wiki: https://en.wikipedia.org/wiki/Recovery_point_objective A recovery poi ...

  8. python之路:Day03 --- Python基础3 >>函数

    本节内容 1.函数基本语法及特性 2.参数 3.局部变量与全局变量 4.返回值 嵌套函数 5.递归 6.匿名函数 7.高阶函数 8.内置函数 一.函数基本语法及特性 区别 面向过程编程:根据业务逻辑从 ...

  9. C#水晶报表,窗体不显示,闪退

    一.问题说明 由于VS2008以后水晶报表不在集成,要用的话需要单独下载. 这里注意如果是用在C#窗体程序里的话一定要下载exe文件,安装msi文件的话VS工具栏里找不到水晶报表控件的.如果你的是64 ...

  10. 【Java EE 学习 72 上】【数据采集系统第四天】【增加调查logo】【文件上传】【动态错误页指定】【上传限制】【国际化】

    增加logo的技术点:文件上传,国际化 文件上传的功能在struts2中是使用文件上传拦截器完成的. 1.首先需要在页面上添加一个文件上传的超链接. 点击该超链接能够跳转到文件上传页面.我给该表单页面 ...