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" ...
随机推荐
- IE浏览器下异步请求的缓存问题
问题: 在做即时通讯时,需要提示用户有几条未读的提醒,这个是(如果有新的提示消息立马在浏览器无刷新提示)即时获取的.但我们的做法是,当用户点击未读信息进入到信息显示页面时重新获取下未读的提醒:但是在I ...
- WinForm 进程、线程、TreeView递归加载、发送邮件--2016年12月13日
进程:一个程序就是一个进程,但是也有一个程序需要多个进程来支持的情况 进程要使用的类是:Process它在命名空间:System.Diagnostics; 静态方法Start(); Process.S ...
- C语言 回文
#include <stdio.h> #include <string.h> int main() { ]; int i,j; printf("Please inpu ...
- socket泄露的问题
在增加keepalive和libevent 超时后,仍然会几个月后出现lsof统计句柄过多的问题,如下图,红线圈定的是不定期出现的错误关闭流,时间点和server端日志(只看到accpet fd,没有 ...
- OpenLayers.2.10.Beginners.Guide---第一章
从网上下载openlayers2,解压取得img theme 文件夹和openlayes.js文件.放在同一文件夹下用phpstorm打开. 创建index.html-------------每一行都 ...
- Dcloud HTML5 监听蓝牙设备 调用 原生安卓实现
最近一直搞Dcloud ,这是HTML5版本的开发,打包时候,可以打包成 apk 和ipa 分别运行在安卓和ios 机器上面, 但是这里面的资料很少,遇到问题,之后只能自己钻研总结, 现在有这么一个需 ...
- Oracle入门基础
使用SQLplus工具登录连接 开始->运行CMD-> C:\Users\Admininstrator> sqlplus 请输入用户名:sys@orcl as sysdba 输入口令 ...
- Flashback Data Archive ( Oracle Total Recall ) introduced in 11g
Flashback Data Archive feature is part of Oracle Total Recall technology. Flashback Data Archive fea ...
- RAC+asm通过rman恢复到单实例+asm
1.恢复参数文件,并修改参数文件 参数文件指名几个最简单的就行,我的参数文件如下: 2.恢复控制文件,并启动数据库到mount 如果是把备份集从别的服务器拷贝到本地恢复的服务器的目录,使用下面的语句指 ...
- Oracle REGEXP_SUBSTR()
REGEXP_SUBSTR函数格式如下: function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier) _ ...