`safe-stable-stringify` 是一个用于将 JavaScript 对象转换为 JSON 字符串的库,它具有两个主要特性:**安全性和稳定性**。

news/2024/9/30 15:35:29

safe-stable-stringify 是一个用于将 JavaScript 对象转换为 JSON 字符串的库,它具有两个主要特性:安全性和稳定性

1. 安全性

  • 处理循环引用:普通的 JSON.stringify 会在遇到循环引用时抛出错误,而 safe-stable-stringify 可以安全地处理循环引用,不会抛出错误。
  • 处理复杂的对象:它可以处理一些特殊的对象类型,如 DateRegExp 等,确保这些对象在转换为字符串时不会出问题。

2. 稳定性

  • 排序键safe-stable-stringify 会按字母顺序对对象的键进行排序,确保相同的对象在不同的环境中生成相同的字符串。这对于一些需要一致性的场景(如缓存、签名验证等)非常有用。
  • 处理 NaN 和 Infinity:它会将 NaNInfinity 转换为字符串形式,而不是忽略它们。

安装

你可以通过 npm 安装 safe-stable-stringify

npm install safe-stable-stringify

使用示例

以下是一些使用 safe-stable-stringify 的示例:

处理循环引用

const safeStringify = require('safe-stable-stringify');const obj = {};
obj.self = obj;console.log(safeStringify(obj)); // 输出: {"self":"[Circular ~]"}

处理特殊对象

const safeStringify = require('safe-stable-stringify');const obj = {date: new Date(),regex: new RegExp('abc', 'g'),number: NaN,infinity: Infinity
};console.log(safeStringify(obj)); 
// 输出: {"date":"2023-10-01T00:00:00.000Z","regex":"/abc/g","number":"NaN","infinity":"Infinity"}

键排序

const safeStringify = require('safe-stable-stringify');const obj = {b: 2,a: 1,c: 3
};console.log(safeStringify(obj)); // 输出: {"a":1,"b":2,"c":3}

JSON.stringify 的对比

  • JSON.stringify:基本的 JSON 字符串化方法,不处理循环引用,不保证键的排序。
  • safe-stable-stringify:处理循环引用,保证键的排序,处理特殊对象,提供更稳定的输出。

总结

safe-stable-stringify 是一个强大的工具,适用于需要安全和稳定 JSON 字符串化的场景。它可以处理复杂的对象结构,确保输出的字符串在不同的环境中具有一致性。

import { configure } from 'safe-stable-stringify';const stringify = configure({bigint: true,circularValue: 'Magic circle!',deterministic: false,maximumDepth: 4,//   maximumBreadth: 4,
});export { configure, stringify };export default stringify;

这段代码使用了 safe-stable-stringify 库,并通过 configure 方法进行了配置。以下是对代码的详细解释:

1. 引入 configure 方法

import { configure } from 'safe-stable-stringify';
  • configure:这是一个函数,用于配置 safe-stable-stringify 的行为。

2. 配置 safe-stable-stringify

const stringify = configure({bigint: true,circularValue: 'Magic circle!',deterministic: false,maximumDepth: 4,// maximumBreadth: 4,
});
  • bigint: true:允许 BigInt 类型的数据被字符串化。默认情况下,BigInt 类型的数据会被忽略。
  • circularValue: 'Magic circle!':当检测到循环引用时,使用这个值来表示循环引用的部分。默认情况下,循环引用会被表示为 "[Circular ~]"
  • deterministic: false:是否启用确定性模式。如果启用,safe-stable-stringify 会确保每次字符串化的结果都是一致的。默认是 true,这里设置为 false
  • maximumDepth: 4:设置对象的最大深度。当深度超过这个值时,对象会被截断。默认值为 Infinity,这里设置为 4
  • // maximumBreadth: 4:设置对象的最大宽度(即对象的键的数量)。当宽度超过这个值时,对象会被截断。默认值为 Infinity,这里被注释掉了。

3. 导出配置后的 stringify 函数

export { configure, stringify };export default stringify;
  • export { configure, stringify }:导出 configurestringify 函数,以便其他模块可以使用。
  • export default stringify:默认导出 stringify 函数,使得其他模块可以使用 import stringify from '...' 的方式导入。

总结

这段代码通过 configure 方法配置了 safe-stable-stringify 的行为,并导出了配置后的 stringify 函数以及 configure 方法。配置选项包括:

  • 允许 BigInt 类型的数据被字符串化。
  • 自定义循环引用的表示方式。
  • 禁用确定性模式。
  • 设置对象的最大深度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/66527.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

能力有限公司

曹明杰 202201170101 性格:外向、乐观、善于团队合作。他总是能够迅速适应新环境,并且有很强的领导能力。 擅长的技术:打游戏 兴趣爱好:阅读小说、旅行探索新地方。 项目角色:项目负责人、爬虫工程师 一句话宣言:乐观的编程领袖,以Python和云计算技术引领创新,热爱科幻…

Java的日期类都是怎么用的

Java中的Date 为什么用类表示日期,而不是像其他语言中那样用一个内置(built-in)类型来表示?例如,Visual Basic 中有一个内置的 date 类型,程序员可以采用#12/31/1999格式指定日期。看起来这似乎很方便,程序员只需要使用内置的 date 类型而不用考虑类。但实际上,VisualBas…

P7730 [JDWOI-1] 蜀道难

首先,区间增加定值并且要求单调不降,很容易想到差分。 于是先把 \(h\) 数组差分一下,题目的要求即为最小代价使得 \(h\) 均为非负数。 观察一下两种操作,发现 \(n\) 的范围很小,可以枚举操作的起点 \(i\) ,然后如果操作是压低,相当于 \(h[i]--,h[i+l[i]]++\) 。而如果操…

就叫它new Star2024 的WP好了

begin WP 跟着引导走就好,这个引导做的还不错,能教人怎么用IDAbase64 WP总算知道为啥面试会问我是不是不知道base64编码,原来这个就是啊,和北邮新生赛re签到题基本一样。 看懂逻辑,经典3并4后单表替换,然后写代码解决就好

洛谷题单指南-分治与倍增-P6648 [CCC2019] Triangle: The Data Structure

原题链接:https://www.luogu.com.cn/problem/P6648 题意解读:在一个n行的数字三角形中,求所有边长为k的正三角形最大值之和。 解题思路: 1、枚举法 枚举每一个边长为k的三角形,在其中求max,然后累加,n最多3000,时间复杂度是n^4,显然超时。 2、倍增和ST思想 此题非常类…

确保上传的缩略图在 PbootCMS 中保持清晰

config/config.php 文件中的相关部分:// 缩略图配置 ico => array(max_width => 1920, // 最大宽度1920max_height => // 最大高度不填写代表不限制 ),清除缓存清除系统缓存修改完配置文件后,需要清除系统缓存,确保配置更新生效。 在后台管理中找到“缓存管…

象形闽都 数智榕城 | PostgreSQL中文社区技术沙龙 - 福州站

在数字化浪潮席卷的时代,数据已成为推动社会进步与企业发展的核心动力。福建,作为东南沿海的经济与文化重镇,正以崭新的姿态拥抱数智未来。为促进福建地区数据库技术的交流与发展,我们诚挚邀请您参加“象行闽都,数智榕城 —— PostgreSQL数据库技术沙龙”。活动主题: 象行…

SSL证书必须要买吗?

在当今数字化的时代,网络安全日益成为人们关注的焦点。SSL证书作为一种保障网络安全通信的工具,是否必须购买成为许多人心中的疑问。 对于企业和商业网站来说,购买SSL证书往往是非常必要的。 首先,从用户信任的角度来看,当用户访问一个带有SSL证书的网站时,浏览器地址栏会…