JSON是JavaScriptObjectNotation的缩写。它最初被设计为JavaScript的一个子集。因为它与编程语言无关,所以成为一种开放标准的通用数据格式。JSON虽然源自JavaScript,但很多编程语言都有JSON解析库,比如C、Java、Python等。虽然“javascript”JSONAPI内置了两个方法供我们快速处理数据格式转换:“JSON.parse()”用于将JSON字符串转换为JavaScript对象“JSON.Stringify()”用于将JavaScript的值转换为JSON字符串,但是有很多限制,比如:JSON.Stringify不能序列化“函数”、“正则表达式”等JSON.parse不能用“函数”、“正则表达式”反序列化和其他格式的数据JSON.Stringify和JSON.parse性能问题JSON.Stringify和JSON.parse解析错误导致整个系统的pua。我们要从“二次包装”的角度来解决这些问题。第三个问题在社区中已经有了比较靠谱的解决方案,可以解决JSON方式的性能问题,其核心思想是“结构化json定义”。比如我们讨论最多的JSONSchema,simdjson就是一个很好的解决方案。第四个问题也有解决办法,就是用JSON.Stringify和JSON.parse包含一层trycatch。缺点是每次调用都需要包含trycatch,不符合前端er的简洁。所以分析了这么多,对于我们解决复杂的业务场景来说,“JSONAPI”的二次封装是非常有必要的!上一篇文章介绍了问题1和问题2的解决方法,有兴趣的可以参考:前端进阶:如何使用javascript存储函数?json解析器基于本机JSONAPI。上层封装,支持序列化功能,正则类型支持原生jsonapi调用方法nativeStringify,nativeParse支持序列化反序列化函数stringify,fastStringify,parse支持序列化反序列化正则stringify,fastStringify,parse内置开箱即用工具方法判断函数类型isFunc判断对象类型isObj判断数组类型isArr判断对象或数组类型isArrOrObj判断正则类型isRegExp也解决了4中提到的问题,支持运行后回调。使用方法如下:安装xijsyarnaddxijs,使用import{parser}from'xijs';constdoor={a:1,b:function(){},c:{c1:'h5-dooring',c2:()=>{},c3:{c:'3fvc',d:{dd:()=>{},ee:/[a-z]/g,},},},d:/[0-9]/g,};//序列化对象parser.stringify(door);//结果如下://{//"a":1,//"b":"__xfunc__functionb(){}",//"c":{//"c1":"h5-dooring",//"c2":"__xfunc__functionc2(){}"//}///反向解析json数据到对象解析器。parse(parser.stringify(door));//结果如下://{//a:1,//b:functionb(){},//c:{//c1:"h5-dooring",//c2:functionc2(){}//}//}同时,xijs还在扩展更多好用的工具功能,让业务开发更高效。目前已经集成了以下工具功能:“store”一个缓存库,支持基于上层localStorage设置过期时间,支持操作回调“uuid”生成唯一id,支持设置长度“randomStr”生成指定数ofrandomstrings"formatDate"开箱即用的时间格式化工具"debounce"防抖功能"throttle"节流功能"url2obj"将url字符串转换为对象"obj2url"将对象转换为编码后的url字符串"isPC"判断是否该设备为ForPCtypegithub地址:https://github.com/MrXujiang/xijs
