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相关推荐

  1. [Json] C#ConvertJson|List转成Json|对象|集合|DataSet|DataTable|DataReader转成Json (转载)...

    点击下载 ConvertJson.rar 本类实现了  C#ConvertJson|List转成Json|对象|集合|DataSet|DataTable|DataReader转成Json| 等功能 大 ...

  2. Html将Json对象在页面结构化显示与Json文件生成下载

    需要引入bootstrap.css .jquery.json-viewer.css .jquery.json-viewer.js 结构化显示的Json  下载后的文件 Json对象初始化var opt ...

  3. ajax传递json对象 php,PHP传递通过AJAX传递JSON对象数组到前台,前台解析,遍历JSON...

    PHP后台接网易接口 header("Content-Type:text/html;charset=utf-8"); //从文件读取数据 //$json_str =file_get ...

  4. ajax传递json对象 php,ajax 和 php 相互传递 JSON对象(转载)

    各位新年快乐,俺把俺写的东西拿出来秀秀,希望大家可以指点一下. 原文出处:http://hi.baidu.com/tangtou/blog/item/603a24384674b120b8998f1f. ...

  5. 把执行结果转成json对象报错_于一次JSON格式错误 之 手把手带你走一波FastJSON将对象转成JSON字符串流程...

    一.前言 最近老大说要新增一个试用广告的功能,我巴拉巴拉的从之前推送广告那里将代码cv过来,然后跟老大说搞定了!过一会老大说返回的json格式不对!于是乎我瞧了瞧: { "adsArea1& ...

  6. php表单转json对象,将表单数据转化为json数据

    C++ list&lt;list&lt;int&gt; &gt;类型的对象遍历 void listSort(list >* initList) { list &g ...

  7. js中的json对象和字符串之间的转化

    字符串转对象(strJSON代表json字符串)    var obj = eval(strJSON);    var obj = strJSON.parseJSON();    var obj = ...

  8. 深入理解JavaScript系列:根本没有“JSON对象”这回事!

    前言 写这篇文章的目的是经常看到开发人员说:把字符串转化为JSON对象,把JSON对象转化成字符串等类似的话题,所以把之前收藏的一篇老外的文章整理翻译了一下,供大家讨论,如有错误,请大家指出,多谢. ...

  9. Js 怎么遍历json对象所有key及根据动态key获取值

    对于json对像,怎么遍历json对象的所有key,在使用json对象时,如果无法知道key,怎么通过key变量来获取值?请参阅下面的关键代码: <html> <head>&l ...

最新文章

  1. 【Android】图像中Drawable向Bitmap的两种转换方法
  2. 英语语法---分词短语详解
  3. 安装Win7时出现“安装程序无法创建新的系统分区……”的解决办法
  4. xshell链接kali
  5. 编译asp.net文件为dll文件
  6. 黑马程序员___Java基础[04-继承和多态]
  7. 技术干货 | Serverless技术架构——极简运维 无限扩容
  8. JavaScript版MD5应用
  9. php 查看本机ip,查看本机ip地址用什么命令
  10. 解剖热敏打印原理—热敏打印机真的没墨水了吗?
  11. 微信投票小程序怎么弄(微信活动投票小程序制作方法)
  12. [论文]著名会议和期刊
  13. 简单的MCU加密方法,防破解、防抄袭、防山寨
  14. lesson 20 one man in a boat 独坐孤舟-for hours数小时做时间状语,having done于句首非谓语做状语,its wasteof time,do nothing
  15. LANDESK DM桌面管理之客户端配置及部署篇
  16. Django-rest-framework简介
  17. vue项目之H5 app页面通过swiper实现中间变大,两边缩小的滑动轮播功能
  18. fastjson 1.2.24 反序列化导致任意命令执行漏洞(CVE-2017-18349)
  19. CpG ODN——艾美捷ODN 1826 (TLRGRADE)说明书
  20. 利用云函数实现网易云音乐自动签到、刷歌

热门文章

  1. 餐馆点餐系统(Java GUI + mysql)
  2. 35位嘉宾的“2022年元宇宙趋势研判”!丨2022元宇宙云峰会金句集锦
  3. 神奇的sqrt函数以及高精度记时函数
  4. DelayQueue使用示例之KTV包厢记时
  5. 表字段的处理(Sql Server)
  6. 打印某个月份的日历表!
  7. 解决蓝奏云的文件分享链接打不开的问题
  8. docker启动rancher后打不开bashboard
  9. 定时脚本任务列子(crontab)
  10. CVPR 2021 | 超实用!住宅户型识别与重建技术来啦!