js/javascript format json(js/javascript 格式化json字符串)
// 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 = ' ';
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(" ","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字符串)的更多相关文章
- 【Json】C#格式化JSON字符串
很多时候我们需要将json字符串以 { "status": 1, "sum": 9 }这种方式显示,而从服务端取回来的时候往往是这样 {&quo ...
- vim调用python格式化json数据
vim调用python格式化json数据 November 30, 2013GNU/Linuxpython3, Vimopenwares python有个标准模块叫json,用于编码/解码,序列化/按 ...
- 在JavaScript中使用json.js:Ajax项目之POST请求(异步)
经常在百度搜索框输入一部分关键词后,弹出候选关键热词.现在我们就用Ajax技术来实现这一功能. 一.下载json.js文件 百度搜一下,最好到json官网下载,安全起见. 并与新建的两个文件部署如图 ...
- javascript、js操作json方法总结(json字符创转换json对象)
相信前端的同学们对json并不陌生,接触过很多.但是很少人知道json的全称是什么,哈哈,我也是查资 料知道的.(JSON JavaScript Object Notation是一种轻量级的数据交换格 ...
- 在JavaScript中使用json.js:Ajax项目之GET请求(同步)
1.用php编写一个提供数据的响应程序(phpdata.php) <?php $arr=array(1,2,3,4); //将数组编码为JSON格式的数据 $jsonarr=json_encod ...
- 在JavaScript中使用json.js:访问JSON编码的某个值
演示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...
- 在JavaScript中使用json.js:使得js数组转为JSON编码
在json的官网中下载json.js,然后在script中引入,以使用json.js提供的两个关键方法. 1.数组对象.toJSONString() 这个方法将返回一个JSON编码格式的字符串,用来表 ...
- JSON(JavaScript Object Notation, JS 对象标记)
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言 ...
- 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 ...
- JS 前端格式化JSON字符串工具
JSON格式化工具,简易实现.作为技术宅,直接上代码,供大家使用.前提:一定要引入jquery哦. <!DOCTYPE html> <html lang="en" ...
随机推荐
- C++基础知识(5)---类和对象
终于把C++中的基础在前面的几篇博客中总结完了,可能还有一些语法还没有总结到,没关系,以后用到了再查资料就好.类是C++中的一个非常重要的概念,这是区别你使用的C++到底是面向过程还是面向对象的一个重 ...
- Android实现双击事件的两种方式
Work around的方法是先监听onTouch事件来监听连续点击次数,每次点击都布置一个间隔时间的延时任务,延时任务执行时判断间隔内是否还有点击,如果没有则发布点击次数,重置计数. 实现代码如下: ...
- hdu 1281 二分图最大匹配
对N个可以放棋子的点(X1,Y1),(x2,Y2)......(Xn,Yn);我们把它竖着排看看~(当然X1可以对多个点~) X1 Y1 X2 Y2 X3 Y3 ..... Xn Yn ...
- 设置redis主从出现的问题
314:S 05 Jan 15:12:17.433 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc ...
- sz rz SecureCRT
yum install lszrz apt-get install lszrz wget http://down1.chinaunix.net/distfiles/lrzsz-0.12.20.tar. ...
- Python模块之"prettytable"
Python模块之"prettytable" 摘要: Python通过prettytable模块可以将输出内容如表格方式整齐的输出.(对于用Python操作数据库会经常用到) 1. ...
- linux vim 插入行号
1 在文本中插入行号 最近有朋友提到某编辑器有一个可以插入行号的插件,问Vim有没有办法可以在文章中插入行号.%$^&*#8~#$@#!--让我们看一下有多少种方式可以在vim中插入行号或数字 ...
- 安卓手机 虚拟键盘输入用 position:fixed解决 !!!
下面 主要代码 方便看. 样式 <style> *{ margin:0; padding:0; } html{ height:100%;/*关键代码*/ } body{ height:10 ...
- wps恢复经典模式
经典模式 情况一: 恢复的方法:点击红色区域 情况二: 恢复的方法:点击红色区域
- Servlet引擎tomcat之安装
原文来自:https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-8-on-ubuntu-14-04 ...