[js]javascript实现多个json对象及列表的美化,容错非法json
javascript实现多个json对象及列表的美化,容错非法json
本文介绍的使用javascript格式化json,核心的函数是eval和JSON.stringify。
支持多个json混在一起的情况,通过统计{}[]来实现。不匹配的{}[]会原样返回。
- 测试用例1:
{}
- 测试用例2:
[1,2,3]
- 测试用例3:
{a:1},[1,2,3]
- 测试用例4:
{a},[b]
- 测试用例5:
[1,2,3
- 测试用例6:
{a:1,[1,2,3]
用例4-6是异常的json串,直接返回原有的数据。
下面是测试用例的输出结果(是直接将测试用例的整行输进去的)
- 测试用例1: `
{}
`- 测试用例2: `
[1,2,3
]
`- 测试用例3: `
{"a": 1
}
,
[1,2,3
]
`- 测试用例4: `
{a}
,
[b]
`
- 测试用例5: `
[1,2,3`- 测试用例6: `{a:1,[1,2,3]`
源码
源代码如下:
/*** 格式化json* 通过统计{}[],自动识别多个json混在一起的情况。**/
function convert(input) {var s = input.trim(); // 忽略前后的空白var res = '';var eCharMap={'[':']','{':'}'}// b是begin, e是end, cnt是countvar bChar = '', eChar = '', cnt = 0;// 压缩还是美化,这里只是压缩。可以通过统计换行来决定是压缩还是美化。var isStrip = false; var bIndex = 0, eIndex = -1;for(var i = 0;i<input.length;i++){var ch = input[i];if(eCharMap[ch]){if(cnt == 0 && i!=0){ // 开始新一轮匹配之前// 不是json的内容eIndex = i;var t = s.substring(bIndex, eIndex);res = res + "\n" + t;}if (cnt == 0){bChar = ch, eChar = eCharMap[ch], cnt = 1, bIndex = i;continue;}else if ((ch == bChar)){cnt = cnt + 1;continue;}} else if (ch == eChar){cnt = cnt - 1; // 匹配到后就减少if(cnt == 0){ // 完成了一次完整的匹配eIndex = i+1;var t = s.substring(bIndex, eIndex);t = beautify(t, isStrip);res = res +'\n'+t;bIndex = i+1;continue;}}}// 如果还没有处理完,直接加上if(cnt != 0){res = res + '\n'+s.substring(bIndex, input.length);}return res;
}/*** isStrip true 为压缩* */
function beautify(s, isStrip){// 处理不是合法的jsontry{eval('obj='+s);}catch(e){return s;}// 如果包含换行,则压缩if(isStrip){return JSON.stringify(obj);}// 否则美化return JSON.stringify(obj, null, 2);
}
预览效果
其他说明
本文来自开源项目DaggerTale-清刚神话
项目地址:
DaggerTale-清刚神话
项目中也实现了C++版本的,源代码在DtJsonUtils.cpp
中的QString JsonUtils::smartFormat(QString str)
:
DtJsonUtils.cpp
[js]javascript实现多个json对象及列表的美化,容错非法json相关推荐
- [Json] C#ConvertJson|List转成Json|对象|集合|DataSet|DataTable|DataReader转成Json (转载)...
点击下载 ConvertJson.rar 本类实现了 C#ConvertJson|List转成Json|对象|集合|DataSet|DataTable|DataReader转成Json| 等功能 大 ...
- Html将Json对象在页面结构化显示与Json文件生成下载
需要引入bootstrap.css .jquery.json-viewer.css .jquery.json-viewer.js 结构化显示的Json 下载后的文件 Json对象初始化var opt ...
- ajax传递json对象 php,PHP传递通过AJAX传递JSON对象数组到前台,前台解析,遍历JSON...
PHP后台接网易接口 header("Content-Type:text/html;charset=utf-8"); //从文件读取数据 //$json_str =file_get ...
- ajax传递json对象 php,ajax 和 php 相互传递 JSON对象(转载)
各位新年快乐,俺把俺写的东西拿出来秀秀,希望大家可以指点一下. 原文出处:http://hi.baidu.com/tangtou/blog/item/603a24384674b120b8998f1f. ...
- 把执行结果转成json对象报错_于一次JSON格式错误 之 手把手带你走一波FastJSON将对象转成JSON字符串流程...
一.前言 最近老大说要新增一个试用广告的功能,我巴拉巴拉的从之前推送广告那里将代码cv过来,然后跟老大说搞定了!过一会老大说返回的json格式不对!于是乎我瞧了瞧: { "adsArea1& ...
- php表单转json对象,将表单数据转化为json数据
C++ list<list<int> >类型的对象遍历 void listSort(list >* initList) { list &g ...
- js中的json对象和字符串之间的转化
字符串转对象(strJSON代表json字符串) var obj = eval(strJSON); var obj = strJSON.parseJSON(); var obj = ...
- 深入理解JavaScript系列:根本没有“JSON对象”这回事!
前言 写这篇文章的目的是经常看到开发人员说:把字符串转化为JSON对象,把JSON对象转化成字符串等类似的话题,所以把之前收藏的一篇老外的文章整理翻译了一下,供大家讨论,如有错误,请大家指出,多谢. ...
- Js 怎么遍历json对象所有key及根据动态key获取值
对于json对像,怎么遍历json对象的所有key,在使用json对象时,如果无法知道key,怎么通过key变量来获取值?请参阅下面的关键代码: <html> <head>&l ...
最新文章
- 【Android】图像中Drawable向Bitmap的两种转换方法
- 英语语法---分词短语详解
- 安装Win7时出现“安装程序无法创建新的系统分区……”的解决办法
- xshell链接kali
- 编译asp.net文件为dll文件
- 黑马程序员___Java基础[04-继承和多态]
- 技术干货 | Serverless技术架构——极简运维 无限扩容
- JavaScript版MD5应用
- php 查看本机ip,查看本机ip地址用什么命令
- 解剖热敏打印原理—热敏打印机真的没墨水了吗?
- 微信投票小程序怎么弄(微信活动投票小程序制作方法)
- [论文]著名会议和期刊
- 简单的MCU加密方法,防破解、防抄袭、防山寨
- lesson 20 one man in a boat 独坐孤舟-for hours数小时做时间状语,having done于句首非谓语做状语,its wasteof time,do nothing
- LANDESK DM桌面管理之客户端配置及部署篇
- Django-rest-framework简介
- vue项目之H5 app页面通过swiper实现中间变大,两边缩小的滑动轮播功能
- fastjson 1.2.24 反序列化导致任意命令执行漏洞(CVE-2017-18349)
- CpG ODN——艾美捷ODN 1826 (TLRGRADE)说明书
- 利用云函数实现网易云音乐自动签到、刷歌