• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# JSON扩展库
2
3该库扩展了原生JSON功能,提供了额外的错误处理、循环引用检测、BigInt处理以及对不同输入类型的严格检查。代码中底层依赖于原生JSON.parseJSON.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和严格的参数校验时。