# ArkTSUtils.ASON
为支持将JSON字符串解析为共享数据,即[Sendable支持的数据类型](../../arkts-utils/arkts-sendable.md#sendable支持的数据类型),ArkTS语言基础库新增了ASON工具。ASON工具支持解析JSON字符串并生成共享数据,用于跨并发实例引用传递,同时也支持将共享数据转换为JSON字符串。
> **说明:**
>
> 本模块首批接口从API version 12开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
>
> 此模块仅支持在ArkTS文件(文件后缀为.ets)中导入使用。
## 导入模块
```ts
import { ArkTSUtils } from '@kit.ArkTS'
```
## ISendable
type ISendable = lang.ISendable
ISendable是所有Sendable类型(除`null`和`undefined`)的父类型。自身没有任何必须的方法和属性。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.Utils.Lang
| 类型 | 说明 |
| ------ | ------ |
| [lang.ISendable](js-apis-arkts-lang.md#langisendable) | 所有Sendable类型的父类型。 |
## Transformer
type Transformer = (this: ISendable, key: string, value: ISendable | undefined | null) => ISendable | undefined | null
用于转换结果函数的类型。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ------ | ---- | --------------- |
| this | [ISendable](#isendable) | 是 | 在解析的键值对所属的对象。|
| key | string | 是 | 属性名。|
| value | [ISendable](#isendable) \| undefined \| null| 是 | 在解析的键值对的值。|
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| [ISendable](#isendable) \| undefined \| null | 返回转换结果后的ISendable对象或undefined或null。|
## BigIntMode
定义处理BigInt的模式。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.Utils.Lang
| 名称 | 值| 说明 |
| ------ | ------ | --------------- |
| DEFAULT | 0 |不支持BigInt。|
| PARSE_AS_BIGINT | 1 |当整数小于-(2^53-1)或大于(2^53-1)时,解析为BigInt。|
| ALWAYS_PARSE_AS_BIGINT | 2 |所有整数都解析为BigInt。|
## ParseReturnType
定义解析结果的返回类型。
**系统能力:** SystemCapability.Utils.Lang
| 名称 | 值| 说明 |
| ------ | ------ | --------------- |
| OBJECT | 0 |返回 SendableObject 对象。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
| MAP13+ | 1 |返回 SendableMap 对象。
**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。|
## ParseOptions
解析的选项,可定义处理BigInt的模式和解析结果的返回类型。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.Utils.Lang
| 名称 | 类型| 必填 | 说明 |
| ------ | ------ | ---- | --------------- |
| bigIntMode | [BigIntMode](#bigintmode) | 是 |定义处理BigInt的模式。|
| parseReturnType | [ParseReturnType](#parsereturntype) | 是 |定义解析结果的返回类型。|
## parse
parse(text: string, reviver?: Transformer, options?: ParseOptions): ISendable | null
用于解析JSON字符串生成ISendable数据或null。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ------ | ---- | --------------- |
| text | string | 是 | 有效的JSON字符串。|
| reviver | [Transformer](#transformer) | 否 | 转换函数,传入该参数,可以用来修改解析生成的原始值。默认值是undefined。目前只支持传入undefined。|
| options | [ParseOptions](#parseoptions) | 否 | 解析的配置,传入该参数,可以用来控制解析生成的结果类型。默认值是undefined。|
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| [ISendable](#isendable) \| null | 返回ISendable数据或null。入参为null时,返回null。|
**错误码:**
以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
| 错误码ID | 错误信息 |
| -------- | ------------- |
| 401 | Parameter error. Invalid JSON string. |
**示例:**
```ts
import { lang } from '@kit.ArkTS';
import { collections } from '@kit.ArkTS';
type ISendable = lang.ISendable;
let jsonText = '{"name": "John", "age": 30, "city": "ChongQing"}';
let obj = ArkTSUtils.ASON.parse(jsonText) as ISendable;
console.info((obj as object)?.["name"]);
// 期望输出: 'John'
console.info((obj as object)?.["age"]);
// 期望输出: 30
console.info((obj as object)?.["city"]);
// 期望输出: 'ChongQing'
let options: ArkTSUtils.ASON.ParseOptions = {
bigIntMode: ArkTSUtils.ASON.BigIntMode.PARSE_AS_BIGINT,
parseReturnType: ArkTSUtils.ASON.ParseReturnType.OBJECT,
}
let numberText = '{"largeNumber":112233445566778899}';
let numberObj = ArkTSUtils.ASON.parse(numberText,undefined,options) as ISendable;
console.info((numberObj as object)?.["largeNumber"]);
// 期望输出: 112233445566778899
let options2: ArkTSUtils.ASON.ParseOptions = {
bigIntMode: ArkTSUtils.ASON.BigIntMode.PARSE_AS_BIGINT,
parseReturnType: ArkTSUtils.ASON.ParseReturnType.MAP,
}
let mapText = '{"largeNumber":112233445566778899}';
let map = ArkTSUtils.ASON.parse(mapText,undefined,options2);
console.info("map is " + map);
// 期望输出: map is [object SendableMap]
console.info("largeNumber is " + (map as collections.Map).get("largeNumber"));
// 期望输出: largeNumber is 112233445566778899
```
## stringify
stringify(value: Object | null | undefined): string
该方法将ArkTS对象数据转换为JSON字符串,额外支持Map和Set相关类型。
> **说明:**
>
> 从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)外)。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| value | Object \| null \| undefined | 是 | ArkTS对象数据。|
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| string | 转换后的JSON字符串。|
**错误码:**
以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
| 错误码ID | 错误信息 |
| -------- | ------------- |
| 401 | Parameter error. Invalid ArkTS value. |
**示例:**
```ts
import { ArkTSUtils, collections, HashMap, HashSet } from '@kit.ArkTS';
let hashMap = new HashMap();
hashMap.set("ha","a");
hashMap.set("sh","b");
hashMap.set("map","c");
let str1 = ArkTSUtils.ASON.stringify(hashMap);
console.info(str1);
//期望输出:'{"sh":"b","ha":"a","map":"c"}'
let hashSet = new HashSet();
hashSet.add("ha");
hashSet.add("sh");
hashSet.add("set");
let str2 = ArkTSUtils.ASON.stringify(hashSet);
console.info(str2);
//期望输出:'["set","sh","ha"]'
let map = new Map();
map.set("m","a");
map.set("a","b");
map.set("p","c");
let str3 = ArkTSUtils.ASON.stringify(map);
console.info(str3);
//期望输出:'{"m":"a","a":"b","p":"c"}'
let set = new Set();
set.add("s");
set.add("e");
set.add("t");
let str4 = ArkTSUtils.ASON.stringify(set);
console.info(str4);
//期望输出:'["s","e","t"]'
let sendableMap = new collections.Map();
sendableMap.set("send","a");
sendableMap.set("able","b");
sendableMap.set("map","c");
let str5 = ArkTSUtils.ASON.stringify(sendableMap);
console.info(str5);
//期望输出:'{"send":"a","able":"b","map":"c"}'
let sendableSet = new collections.Set();
sendableSet.add("send");
sendableSet.add("able");
sendableSet.add("set");
let str6 = ArkTSUtils.ASON.stringify(sendableSet);
console.info(str6);
//期望输出:'["send","able","set"]'
```