• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# ArkTSUtils.ASON
2<!--Kit: ArkTS-->
3<!--Subsystem: CommonLibrary-->
4<!--Owner: @lijiamin2025-->
5<!--Designer: @weng-changcheng-->
6<!--Tester: @kirl75; @zsw_zhushiwei-->
7<!--Adviser: @ge-yafang-->
8
9为支持将JSON字符串解析为共享数据,即[Sendable支持的数据类型](../../arkts-utils/arkts-sendable.md#sendable支持的数据类型),ArkTS语言基础库新增了ASON工具。ASON工具支持解析JSON字符串并生成共享数据,用于跨并发实例引用传递,同时也支持将共享数据转换为JSON字符串。
10
11> **说明:**
12>
13> 本模块首批接口从API version 12开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
14>
15> 此模块仅支持在ArkTS文件(文件后缀为.ets)中导入使用。
16
17## 导入模块
18
19```ts
20import { ArkTSUtils } from '@kit.ArkTS'
21```
22
23## ISendable
24
25type ISendable = lang.ISendable
26
27ISendable是所有Sendable类型(除`null`和`undefined`)的父类型。自身没有任何必须的方法和属性。
28
29**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
30
31**系统能力:** SystemCapability.Utils.Lang
32
33| 类型 | 说明   |
34| ------ | ------ |
35| [lang.ISendable](js-apis-arkts-lang.md#langisendable)   | 所有Sendable类型的父类型。 |
36
37## Transformer
38
39type Transformer = (this: ISendable, key: string, value: ISendable | undefined | null) => ISendable | undefined | null
40
41用于转换结果函数的类型。
42
43**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
44
45**系统能力:** SystemCapability.Utils.Lang
46
47**参数:**
48
49| 参数名 | 类型   | 必填 | 说明            |
50| ------ | ------ | ---- | --------------- |
51| this   | [ISendable](#isendable) | 是 | 在解析的键值对所属的对象。|
52| key  | string | 是 | 属性名。|
53| value  | [ISendable](#isendable) \| undefined \| null| 是 | 在解析的键值对的值。|
54
55**返回值:**
56
57| 类型 | 说明 |
58| -------- | -------- |
59| [ISendable](#isendable) \| undefined \| null | 返回转换结果后的ISendable对象或undefined或null。|
60
61## BigIntMode
62
63定义处理BigInt的模式。
64
65**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
66
67**系统能力:** SystemCapability.Utils.Lang
68
69| 名称 | 值| 说明            |
70| ------ | ------ | --------------- |
71| DEFAULT   | 0 |不支持BigInt。|
72| PARSE_AS_BIGINT   | 1 |当整数小于-(2^53-1)或大于(2^53-1)时,解析为BigInt。|
73| ALWAYS_PARSE_AS_BIGINT   | 2 |所有整数都解析为BigInt。|
74
75## ParseReturnType
76
77定义解析结果的返回类型。
78
79**系统能力:** SystemCapability.Utils.Lang
80
81| 名称 | 值| 说明            |
82| ------ | ------ | --------------- |
83| OBJECT   | 0 |返回 SendableObject 对象。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
84| MAP<sup>13+</sup>   | 1 |返回 SendableMap 对象。<br>**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。|
85
86## ParseOptions
87
88解析的选项,可定义处理BigInt的模式和解析结果的返回类型。
89
90**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
91
92**系统能力:** SystemCapability.Utils.Lang
93
94| 名称 | 类型| 必填 | 说明            |
95| ------ | ------ | ---- | --------------- |
96| bigIntMode   | [BigIntMode](#bigintmode) | 是 |定义处理BigInt的模式。|
97| parseReturnType   | [ParseReturnType](#parsereturntype) | 是 |定义解析结果的返回类型。|
98
99## parse
100
101parse(text: string, reviver?: Transformer, options?: ParseOptions): ISendable | null
102
103用于解析JSON字符串生成ISendable数据或null。
104
105**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
106
107**系统能力:** SystemCapability.Utils.Lang
108
109**参数:**
110
111| 参数名 | 类型   | 必填 | 说明            |
112| ------ | ------ | ---- | --------------- |
113| text   | string | 是 | 有效的JSON字符串。|
114| reviver   | [Transformer](#transformer) | 否 | 转换函数,传入该参数,可以用来修改解析生成的原始值。默认值是undefined。目前只支持传入undefined。|
115| options   | [ParseOptions](#parseoptions) | 否 | 解析的配置,传入该参数,可以用来控制解析生成的结果类型。默认值是undefined。|
116
117**返回值:**
118
119| 类型 | 说明 |
120| -------- | -------- |
121| [ISendable](#isendable) \| null | 返回ISendable数据或null。入参为null时,返回null。|
122
123**错误码:**
124
125以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
126
127| 错误码ID | 错误信息      |
128| -------- | ------------- |
129| 401      | Parameter error. Invalid JSON string. |
130
131**示例:**
132
133```ts
134import { lang } from '@kit.ArkTS';
135import { collections } from '@kit.ArkTS';
136
137type ISendable = lang.ISendable;
138let jsonText = '{"name": "John", "age": 30, "city": "ChongQing"}';
139let obj = ArkTSUtils.ASON.parse(jsonText) as ISendable;
140console.info((obj as object)?.["name"]);
141// 期望输出: 'John'
142console.info((obj as object)?.["age"]);
143// 期望输出: 30
144console.info((obj as object)?.["city"]);
145// 期望输出: 'ChongQing'
146
147let options: ArkTSUtils.ASON.ParseOptions = {
148  bigIntMode: ArkTSUtils.ASON.BigIntMode.PARSE_AS_BIGINT,
149  parseReturnType: ArkTSUtils.ASON.ParseReturnType.OBJECT,
150}
151let numberText = '{"largeNumber":112233445566778899}';
152let numberObj = ArkTSUtils.ASON.parse(numberText,undefined,options) as ISendable;
153
154console.info((numberObj as object)?.["largeNumber"]);
155// 期望输出: 112233445566778899
156
157let options2: ArkTSUtils.ASON.ParseOptions = {
158    bigIntMode: ArkTSUtils.ASON.BigIntMode.PARSE_AS_BIGINT,
159    parseReturnType: ArkTSUtils.ASON.ParseReturnType.MAP,
160  }
161let mapText = '{"largeNumber":112233445566778899}';
162let map  = ArkTSUtils.ASON.parse(mapText,undefined,options2);
163console.info("map is " + map);
164// 期望输出: map is [object SendableMap]
165console.info("largeNumber is " + (map as collections.Map<string,bigint>).get("largeNumber"));
166// 期望输出: largeNumber is 112233445566778899
167```
168
169## stringify
170
171stringify(value: Object | null | undefined): string
172
173该方法将ArkTS对象数据转换为JSON字符串,额外支持Map和Set相关类型。
174
175> **说明:**
176>
177> 从API 18开始参数修改为Object类型,API 18之前参数只支持ISendable类型(除[Int8Array](arkts-apis-arkts-collections-Int8Array.md)、[Uint8Array](arkts-apis-arkts-collections-Uint8Array.md)、[Int16Array](arkts-apis-arkts-collections-Int16Array.md)、[Uint16Array](arkts-apis-arkts-collections-Uint16Array.md)、[Int32Array](arkts-apis-arkts-collections-Int32Array.md)、[Uint32Array](arkts-apis-arkts-collections-Uint32Array.md)、[Uint8ClampedArray](arkts-apis-arkts-collections-Uint8ClampedArray.md)、[Float32Array](arkts-apis-arkts-collections-Float32Array.md)外)。
178
179**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
180
181**系统能力:** SystemCapability.Utils.Lang
182
183**参数:**
184
185| 参数名 | 类型 | 必填 | 说明 |
186| -------- | -------- | -------- | -------- |
187| value | Object \| null \| undefined  | 是 | ArkTS对象数据。|
188
189**返回值:**
190
191| 类型 | 说明 |
192| -------- | -------- |
193| string | 转换后的JSON字符串。|
194
195**错误码:**
196
197以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
198
199| 错误码ID | 错误信息      |
200| -------- | ------------- |
201| 401      | Parameter error. Invalid ArkTS value. |
202
203**示例:**
204
205```ts
206import { ArkTSUtils, collections, HashMap, HashSet } from '@kit.ArkTS';
207
208let hashMap = new HashMap<string,string>();
209hashMap.set("ha","a");
210hashMap.set("sh","b");
211hashMap.set("map","c");
212let str1 = ArkTSUtils.ASON.stringify(hashMap);
213console.info(str1);
214//期望输出:'{"sh":"b","ha":"a","map":"c"}'
215let hashSet = new HashSet<string>();
216hashSet.add("ha");
217hashSet.add("sh");
218hashSet.add("set");
219let str2 = ArkTSUtils.ASON.stringify(hashSet);
220console.info(str2);
221//期望输出:'["set","sh","ha"]'
222let map = new Map<string,string>();
223map.set("m","a");
224map.set("a","b");
225map.set("p","c");
226let str3 = ArkTSUtils.ASON.stringify(map);
227console.info(str3);
228//期望输出:'{"m":"a","a":"b","p":"c"}'
229let set = new Set<string>();
230set.add("s");
231set.add("e");
232set.add("t");
233let str4 = ArkTSUtils.ASON.stringify(set);
234console.info(str4);
235//期望输出:'["s","e","t"]'
236let sendableMap = new collections.Map<string,string>();
237sendableMap.set("send","a");
238sendableMap.set("able","b");
239sendableMap.set("map","c");
240let str5 = ArkTSUtils.ASON.stringify(sendableMap);
241console.info(str5);
242//期望输出:'{"send":"a","able":"b","map":"c"}'
243let sendableSet = new collections.Set<string>();
244sendableSet.add("send");
245sendableSet.add("able");
246sendableSet.add("set");
247let str6 = ArkTSUtils.ASON.stringify(sendableSet);
248console.info(str6);
249//期望输出:'["send","able","set"]'
250```