1# JSON扩展库 2 3该库扩展了原生JSON功能,提供了额外的错误处理、循环引用检测、BigInt处理以及对不同输入类型的严格检查。代码中底层依赖于原生JSON.parse和JSON.stringify,但在此基础上加入了多种自定义逻辑并提供额外的has和remove接口,具体可见[@arkts.json](../reference/apis-arkts/js-apis-json.md)。 4 5## parse 6 7parse(text: string, reviver?: Transformer, options?: ParseOptions): Object | null 8 9解析JSON字符串,支持BigInt模式。 10 11**与原生的区别:** 12 13| 特性 | 原生parse | 本库parse | 14| -------- | -------- | -------- | 15| BigInt支持 | 不支持 |支持(通过parseBigInt扩展)| 16| 参数校验 | 弱校验 |强校验(抛出BusinessError) | 17| 错误信息 | 原生错误(如SyntaxError) | 自定义BusinessError | 18| reviver参数 | 支持 | 支持,但强制类型检查 | 19 20## stringify 21 22stringify(value: Object, replacer?: (number | string)[] | null, space?: string | number): string 23 24将对象转换为JSON字符串,支持BigInt模式。 25 26**与原生的区别:** 27 28| 特性 | 原生stringify | 本库stringify | 29| -------- | -------- | -------- | 30| BigInt支持 | 不支持(会报错)| 支持(通过stringifyBigInt扩展) | 31| 循环引用检测 | 直接报错TypeError | 检测并抛出BusinessError | 32| 参数校验 | 弱校验 | 强校验(replacer 必须是函数或数组) | 33| 错误信息 | 原生错误 | 自定义BusinessError | 34 35## has 36 37has(obj: object, property: string): boolean 38 39检查对象是否包含指定的属性,确保传入的值是一个对象,并且属性键是有效的字符串。 40 41**与原生的区别:** 42 43| 特性| 原生方式(obj.hasOwnProperty) | 本库has | 44| -------- | -------- | -------- | 45| 参数校验 | 无校验(可能误用) | 强制检查obj是普通对象,property是非空字符串 | 46| 错误处理 | 可能静默失败 | 抛出BusinessError | 47 48## remove 49 50remove(obj: object, property: string): void 51 52从对象中删除指定的属性。 53 54| 特性 | 原生方式(delete obj.key) | 本库remove | 55| -------- | -------- | -------- | 56| 参数校验 | 无校验(可能误删) | 强制检查obj是普通对象,property是非空字符串 | 57| 错误处理 | 可能静默失败 | 抛出BusinessError | 58 59**总结:** 60 61| 功能 | 原生JSON | 本库 | 62| ----- | ----- | -----| 63| 严格参数校验 | 不支持 | 支持 | 64| 循环引用检测 | 不支持 | 支持 | 65| BigInt处理 | 不支持 | 支持 | 66| 增强的错误处理(BusinessError) | 不支持 | 支持 | 67| 额外方法(has/remove) | 不支持 | 支持 | 68 69**适用场景:** 70 71- 需要处理BigInt的JSON解析或序列化。 72 73- 需要更严格的参数校验和错误处理。 74 75- 需要检测循环引用。 76 77- 需要安全的对象操作(has/remove)。 78 79该库适用于需要增强JSON功能的场景,特别是在处理BigInt和严格的参数校验时。