前端pua: JSON API还有二次封装的必要吗?

简介: JSON 是 JavaScript Object Notation 的缩写,最初是被设计为 JavaScript 的一个子集,因其和编程语言无关,所以成为了一种开放标准的常见数据格式。虽然 JSON 是源自于JavaScript,但到目前很多编程语言都有了 JSON 解析的库,如 C、Java、Python 等。

网络异常,图片无法展示
|



JSON 是 JavaScript Object Notation 的缩写,最初是被设计为 JavaScript 的一个子集,因其和编程语言无关,所以成为了一种开放标准的常见数据格式。虽然 JSON 是源自于JavaScript,但到目前很多编程语言都有了 JSON 解析的库,如 C、Java、Python 等。


虽然 javascriptJSON API 内置了两种方法方便我们快捷的处理数据格式转换:


  • JSON.parse() 用于将一个 JSON 字符串转换为 JavaScript 对象
  • JSON.Stringify() 用于将 JavaScript 值转换为 JSON 字符串


但也存在不少限制, 比如:


  1. JSON.Stringify 无法序列化 函数, 正则表达式
  2. JSON.parse 无法反序列化具有 函数, 正则表达式 等格式的数据
  3. JSON.StringifyJSON.parse 性能问题
  4. JSON.StringifyJSON.parse 解析出错导致整个系统 pua


这些问题我们不得不从 二次封装 的角度去解决.


第3个问题社区已经有比较可靠的解决方案可以来解决 JSON 方法的性能问题, 其核心思想就是 结构化json定义. 比如我们最常讨论的 JSON Schema, simdjson 就是一个不错的方案.


第四个问题也有解决方案, 就是在使用 JSON.StringifyJSON.parse 的地方包一层 try catch, 缺点就是每次调用都需要包 try catch, 不太符合前端 er 们的简约风.


所以分析了这么多, 针对复杂业务场景, 我们非常有必要二次封装 JSON API !

在上篇文章中我介绍了解决 1 和 2 问题的方案, 感兴趣的可以参考:



该 json 解析器基于原生JSON API进行的上层封装, 支持序列化函数, 正则类型


  • 支持原生 json api 调用方式nativeStringify, nativeParse
  • 支持序列化和反序列化函数 stringify, fastStringify, parse
  • 支持序列化和反序列化正则 stringify, fastStringify, parse
  • 内置开箱即用的工具方法


  • 判断函数类型 isFunc
  • 判断对象类型 isObj
  • 判断数组类型 isArr
  • 判断对象或数组类型 isArrOrObj
  • 判断正则类型 isRegExp


同时方案中也解决了 4 中提到的问题, 并且支持操作后的回调, 使用方法如下:


  1. 安装 xijs


yarn add xijs


  1. 使用


import { parser } from 'xijs';
const door = {
  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__function b() {}",
//  "c": {
//    "c1": "h5-dooring",
//    "c2": "__xfunc__function c2() {}"
//  }
// }
// 将json数据反解析成对象
parser.parse(parser.stringify(door));
// 结果如下:
// {
//  a: 1,
//  b: function b() {},
//  c: {
//    c1: "h5-dooring",
//    c2: function c2() {}
//  }
// }


同时 xijs 还在持续扩充更有用的工具函数, 让业务开发更高效. 目前已集成了如下工具函数:


  • store 基于 localStorage 上层封装的支持过期时间设置的缓存库, 支持操作回调
  • uuid 生成唯一id, 支持设置长度
  • randomStr 生成指定个数的随机字符串
  • formatDate 开箱即用的时间格式化工具
  • debounce 防抖函数
  • throttle 节流函数
  • url2obj 将url字符串转换为对象
  • obj2url 将对象转换成编码后的url字符串
  • isPC 判断设备是否为PC类型



目录
相关文章
|
5天前
|
前端开发 API UED
Python后端与前端交互新纪元:AJAX、Fetch API联手,打造极致用户体验!
Python后端与前端交互新纪元:AJAX、Fetch API联手,打造极致用户体验!
25 2
|
14天前
|
缓存 测试技术 API
API的封装步骤流程
API封装流程是一个系统化的过程,旨在将内部功能转化为可复用的接口供外部调用。流程包括明确需求、设计接口、选择技术和工具、编写代码、测试、文档编写及部署维护。具体步骤为确定业务功能、数据来源;设计URL、请求方式、参数及响应格式;选择开发语言、框架和数据库技术;实现数据连接、业务逻辑、错误处理;进行功能、性能测试;编写详细文档;部署并持续维护。通过这些步骤,确保API稳定可靠,提高性能。
|
2月前
|
XML JSON 前端开发
【Web前端揭秘】XML与JSON:数据界的双雄对决,你的选择将如何改写Web世界的未来?
【8月更文挑战第26天】本文深入探讨了XML和JSON这两种广泛使用的数据交换格式在Web前端开发中的应用。XML采用自定义标签描述数据结构,适用于复杂层次数据的表示,而JSON则以键值对形式呈现数据,更为轻量且易解析。通过对两种格式的示例代码、结构特点及应用场景的分析,本文旨在帮助读者更好地理解它们的差异,并根据实际需求选择最合适的数据交换格式。
47 1
|
2月前
|
缓存 前端开发 中间件
[go 面试] 前端请求到后端API的中间件流程解析
[go 面试] 前端请求到后端API的中间件流程解析
|
5天前
|
API PHP
ThinkPHP 通用的API格式封装
本文介绍了在ThinkPHP框架中如何统一封装API返回格式的方法,包括创建状态码枚举类、编写统一格式化函数以及在BaseController和Error控制器中重写`__call`方法来处理不存在的方法或控制器调用,以实现统一的错误处理和返回格式。
ThinkPHP 通用的API格式封装
|
5天前
|
XML 缓存 JavaScript
提升对前端的认知,不得不了解Web API的DOM和BOM
该文章强调了在前端开发中理解和掌握DOM(文档对象模型)和BOM(浏览器对象模型)的重要性,并介绍了它们的相关操作和应用。
提升对前端的认知,不得不了解Web API的DOM和BOM
|
2月前
|
存储 JSON API
淘系API接口(解析返回的json数据)商品详情数据解析助力开发者
——在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦! 淘宝API接口(如淘宝开放平台提供的API)允许开发者获取淘宝商品的各种信息,包括商品详情。然而,需要注意的是,直接访问淘宝的商品数据API通常需要商家身份或开发者权限,并且需要遵循淘宝的API使用协议。
淘系API接口(解析返回的json数据)商品详情数据解析助力开发者
|
2月前
|
JSON 前端开发 API
构建前端防腐策略问题之更新getMemoryUsagePercent函数以适应新的API返回格式的问题如何解决
构建前端防腐策略问题之更新getMemoryUsagePercent函数以适应新的API返回格式的问题如何解决
构建前端防腐策略问题之更新getMemoryUsagePercent函数以适应新的API返回格式的问题如何解决
|
2月前
|
缓存 前端开发 Java
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
【8月更文挑战第10天】java基础巩固,工具类的封装
20 1
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
|
2月前
|
JSON 前端开发 API
【淘系】商品详情属性解析(属性规格详情图sku等json数据示例返回参考),淘系API接口系列
在淘宝(或天猫)平台上,商品详情属性(如属性规格、详情图、SKU等)是商家在发布商品时设置的,用于描述商品的详细信息和不同规格选项。这些信息对于消费者了解商品特性、进行购买决策至关重要。然而,直接通过前端页面获取这些信息的结构化数据(如JSON格式)并非直接暴露给普通用户或开发者,因为这涉及到平台的商业机密和数据安全。 不过,淘宝平台提供了丰富的API接口(如淘宝开放平台API),允许有资质的开发者或合作伙伴通过编程方式获取商品信息。这些API接口通常需要注册开发者账号、申请应用密钥(App Key)和秘钥(App Secret),并遵守淘宝的API使用协议。