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" ...
随机推荐
- tcp_tw_reuse、tcp_tw_recycle 使用场景及注意事项
linux TIME_WAIT 相关参数: net.ipv4.tcp_tw_reuse = 表示开启重用.允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭 net.i ...
- iOS coredata 数据库的加密(待研究)
https://github.com/project-imas/encrypted-core-data 使用起来很方便,底层还是使用了SQLCipher,有时间要研究一下! 数据库的密码不能用固定字符 ...
- 10分钟了解设计模式(C#)
最近把<大话设计模式>重温了下(看完序才知道原来作者是也是博客园园友,这本书的最早博客版本在这里).体会最深的就是面向接口编程的重要性,如何在自己的项目中进行抽象,合理的利用各种设计模式. ...
- Android源码阅读 – Zygote
@Dlive 本文档: 使用的Android源码版本为:Android-4.4.3_r1 kitkat (源码下载: http://source.android.com/source/index.ht ...
- window下安装anaconda ipython和spyder都打不开
1. 环境 win7 64位,软件是Anaconda2-4.1.1-Windows-x86_64.exe 2. 出现的问题 ipython打不开,一闪而过 spyder点击没有反应 anaconda ...
- qt 定时器
重写方法 virtual void timerEvent(QTimerEvent *event); 启动定时器 timerId = startTimer(500);
- Ajax文件上传
- C#winForm调用WebService的远程接口
Web Service 的创建简单编码.发布和部署 上一篇详细概述了WebService的创建,编码,发布和部署,那么作为客户端的程序如何访问远程端的WebService 接下来看一下具体步骤: ...
- 简单谈谈NFC(转载自-tlex/pku_android)
NFC是Near Field Communication缩写,又称近距离无线通信,是一种短距离的高频无线通信技术,允许电子设备之间进行非接触式点对点数据传输(在十厘米内)交换数据.这个技术由免接触式射 ...
- js获取url以及截取后边所带参数
var shopId = ""; function GetRequest() { var url = location.search; //获取url中"?"符 ...