• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.util.json (JSON解析与生成)
2<!--Kit: ArkTS-->
3<!--Subsystem: CommonLibrary-->
4<!--Owner: @xliu-huanwei; @shilei123; @huanghello-->
5<!--Designer: @yuanyao14-->
6<!--Tester: @kirl75; @zsw_zhushiwei-->
7<!--Adviser: @ge-yafang-->
8
9本模块提供了将JSON文本转换为JSON对象或值,以及将对象转换为JSON文本等功能。
10
11>**说明:**
12>
13>本模块首批接口从API version 12开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
14
15
16## 导入模块
17
18```ts
19import { JSON } from '@kit.ArkTS';
20```
21
22## Transformer
23
24type Transformer = (this: Object, key: string, value: Object) => Object | undefined | null
25
26用于转换结果函数的类型。<br>
27作为[JSON.parse](#jsonparse)函数的参数时,对象的每个成员将会调用此函数,允许在解析过程中对数据进行自定义处理或转换。<br>
28作为[JSON.stringify](#jsonstringify-1)函数的参数时,序列化时,每个属性都会经过该函数的转换处理。
29
30**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
31
32**系统能力:** SystemCapability.Utils.Lang
33
34**参数:**
35
36| 参数名 | 类型   | 必填 | 说明            |
37| ------ | ------ | ---- | --------------- |
38| this   | Object | 是 | 在解析的键值对所属的对象。|
39| key  | string | 是 | 属性名。|
40| value  | Object | 是 | 在解析的键值对的值。|
41
42**返回值:**
43
44| 类型 | 说明 |
45| -------- | -------- |
46| Object \| undefined \| null | 返回修改后的对象或undefined或null。|
47
48## BigIntMode
49
50定义处理BigInt的模式。
51
52**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
53
54**系统能力:** SystemCapability.Utils.Lang
55
56| 名称 | 值| 说明            |
57| ------ | ------ | --------------- |
58| DEFAULT   | 0 |不支持BigInt。|
59| PARSE_AS_BIGINT   | 1 |当整数小于-(2^53-1)或大于(2^53-1)时,解析为BigInt。|
60| ALWAYS_PARSE_AS_BIGINT   | 2 |所有整数都解析为BigInt。|
61
62## ParseOptions
63
64解析的选项,可定义处理BigInt的模式。
65
66**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
67
68**系统能力:** SystemCapability.Utils.Lang
69
70| 名称 | 类型| 必填 |说明            |
71| ------ | ------ | ---- | --------------- |
72| bigIntMode   | [BigIntMode](#bigintmode) | 是 |定义处理BigInt的模式。|
73
74## JSON.parse
75
76parse(text: string, reviver?: Transformer, options?: ParseOptions): Object | null
77
78解析JSON字符串生成ArkTS对象或null。
79
80**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
81
82**系统能力:** SystemCapability.Utils.Lang
83
84**参数:**
85
86| 参数名 | 类型   | 必填 | 说明            |
87| ------ | ------ | ---- | --------------- |
88| text   | string | 是 | 有效的JSON字符串。|
89| reviver  | [Transformer](#transformer) | 否 | 转换函数,传入该参数,可以用来修改解析生成的原始值。默认值是undefined。|
90| options   | [ParseOptions](#parseoptions) | 否 | 解析的配置,传入该参数,可以用来控制解析生成的类型。默认值是undefined。|
91
92**返回值:**
93
94| 类型 | 说明 |
95| -------- | -------- |
96| Object \| null | 返回ArkTS对象或null。当入参是null时,返回null。|
97
98**错误码:**
99
100以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
101
102| 错误码ID | 错误信息 |
103| -------- | -------- |
104| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
105
106**示例:**
107
108```ts
109import { JSON } from '@kit.ArkTS';
110
111function reviverFunc(key: string, value: Object): Object | undefined | null {
112  if (key === "age" && typeof value === 'number') {
113    return value + 1;
114  }
115  return value;
116}
117
118const jsonText = '{"name": "John", "age": 30, "city": "ChongQing"}';
119let obj = JSON.parse(jsonText);
120console.info((obj as object)?.["name"]);
121// 打印结果:John
122
123const jsonTextStr = '{"name": "John", "age": 30}';
124let objRst = JSON.parse(jsonTextStr, reviverFunc);
125console.info((objRst as object)?.["age"]);
126// 打印结果:31
127
128const numberText = '{"number": 10, "largeNumber": 112233445566778899}';
129let options: JSON.ParseOptions = { bigIntMode: JSON.BigIntMode.PARSE_AS_BIGINT }
130let numberObj = JSON.parse(numberText, null, options) as Object;
131
132console.info(typeof (numberObj as object)?.["number"]);
133// 打印结果: number
134console.info((numberObj as object)?.["number"]);
135// 打印结果: 10
136
137console.info(typeof (numberObj as object)?.["largeNumber"]);
138// 打印结果: bigint
139console.info((numberObj as object)?.["largeNumber"]);
140// 打印结果: 112233445566778899
141```
142
143## JSON.stringify
144
145stringify(value: Object, replacer?: (number | string)[] | null, space?: string | number): string
146
147该方法将一个ArkTS对象或数组转换为JSON字符串,支持线性容器的转换,不支持非线性容器。
148
149**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
150
151**系统能力:** SystemCapability.Utils.Lang
152
153**参数:**
154
155| 参数名 | 类型 | 必填 | 说明 |
156| -------- | -------- | -------- | -------- |
157| value | Object | 是 | ArkTS对象或数组。支持线性容器的转换,不支持非线性容器。|
158| replacer | number[] \| string[] \| null | 否 | 当参数是数组时,只有包含在这个数组中的属性名才会被序列化到最终的JSON字符串中;当参数为null或者未提供时,则对象所有的属性都会被序列化。默认值是undefined。|
159| space | string \| number | 否 | 指定缩进用的空格或字符串,用于美化输出。当参数是数字时表示缩进空格数;当参数是字符串时表示缩进字符;无参数则无缩进。默认值是空字符串。|
160
161**返回值:**
162
163| 类型 | 说明 |
164| -------- | -------- |
165| string | 转换后的JSON字符串。|
166
167**错误码:**
168
169以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
170
171| 错误码ID | 错误信息 |
172| -------- | -------- |
173| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
174
175**示例:**
176
177```ts
178import { JSON } from '@kit.ArkTS';
179
180interface Person {
181  name: string;
182  age: number;
183  city: string;
184}
185
186let person: Person = {name: "John",age: 30, city: "New York"};
187
188let rstArrStr = JSON.stringify(person, ["name", "age"]);
189console.info(rstArrStr);
190// 打印结果:{"name":"John","age":30}
191
192let rstStrSpace = JSON.stringify(person, ["name", "age"], '  ');
193console.info(rstStrSpace);
194/*
195打印结果:
196{
197  "name": "John",
198  "age": 30
199}
200*/
201
202let rstStrStar = JSON.stringify(person, ["name", "age"], '  &&');
203console.info(rstStrStar);
204/*
205打印结果:
206{
207  &&"name": "John",
208  &&"age": 30
209}
210*/
211
212let bigIntObj = BigInt(112233445566778899n);
213console.info(JSON.stringify(bigIntObj));
214// 打印结果:112233445566778899
215```
216
217## JSON.stringify
218
219stringify(value: Object, replacer?: Transformer, space?: string | number): string
220
221该方法将一个ArkTS对象或数组转换为JSON字符串,支持线性容器的转换,不支持非线性容器。
222
223**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
224
225**系统能力:** SystemCapability.Utils.Lang
226
227**参数:**
228
229| 参数名 | 类型 | 必填 | 说明 |
230| -------- | -------- | -------- | -------- |
231| value | Object | 是 | ArkTS对象或数组,支持线性容器的转换,不支持非线性容器。|
232| replacer | [Transformer](#transformer) | 否 | 在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理。默认值是undefined。|
233| space | string \| number | 否 | 指定缩进用的空格或字符串或空字符串,用于美化输出。当参数是数字时表示有多少个空格;当参数是字符串时,该字符串被当作空格;当参数没有提供时,将没有空格。默认值是空字符串。|
234
235**返回值:**
236
237| 类型 | 说明 |
238| -------- | -------- |
239| string | 转换后的JSON字符串。|
240
241**错误码:**
242
243以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
244
245| 错误码ID | 错误信息 |
246| -------- | -------- |
247| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
248
249**示例:**
250
251```ts
252import { JSON } from '@kit.ArkTS';
253
254function replacer(key: string, value: Object): Object {
255  if (typeof value === "string") {
256    return value.toUpperCase();
257  }
258  return value;
259}
260
261interface Person {
262  name: string;
263  age: number;
264  city: string;
265}
266let inputObj = {"name": "John", "age": 30, "city": "ChongQing"} as Person;
267
268console.info(JSON.stringify(inputObj, replacer));
269// 打印结果:{"name":"JOHN","age":30,"city":"CHONGQING"}
270
271console.info(JSON.stringify(inputObj, replacer, '  '));
272/*
273打印结果:
274{
275  "name": "JOHN",
276  "age": 30,
277  "city": "CHONGQING"
278}
279*/
280```
281
282## JSON.has
283
284has(obj: object, property: string): boolean
285
286检查ArkTS对象是否包含某种属性,可用于[JSON.parse](#jsonparse)解析JSON字符串之后。has接口仅支持最外层为字典形式(即大括号而非中括号包围)的合法json串。
287
288**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
289
290**系统能力:** SystemCapability.Utils.Lang
291
292**参数:**
293
294| 参数名 | 类型 | 必填 | 说明 |
295| -------- | -------- | -------- | -------- |
296| obj | object | 是 | ArkTS对象。|
297| property | string | 是 | 属性名。|
298
299**返回值:**
300
301| 类型 | 说明 |
302| -------- | -------- |
303| boolean | 返回ArkTS对象是否包含某种属性结果。true表示包含,false表示不包含。|
304
305**错误码:**
306
307以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
308
309| 错误码ID | 错误信息 |
310| -------- | -------- |
311| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. |
312
313**示例:**
314
315```ts
316import { JSON } from '@kit.ArkTS';
317
318const jsonText = '{"name": "John", "age": 30, "city": "ChongQing"}';
319let inputObj = JSON.parse(jsonText);
320let result = JSON.has(inputObj, "name");
321console.info("result = " + result);
322// 打印结果:result = true
323```
324
325
326## JSON.remove
327
328remove(obj: object, property: string): void
329
330从ArkTS对象中删除某种属性,可用于[JSON.parse](#jsonparse)解析JSON字符串之后。JSON.remove接口仅支持最外层为字典形式(即大括号而非中括号包围)的合法json串。
331
332**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
333
334**系统能力:** SystemCapability.Utils.Lang
335
336**参数:**
337
338| 参数名 | 类型 | 必填 | 说明 |
339| -------- | -------- | -------- | -------- |
340| obj | object | 是 | ArkTS对象。|
341| property | string | 是 | 属性名。|
342
343**错误码:**
344
345以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
346
347| 错误码ID | 错误信息 |
348| -------- | -------- |
349| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. |
350
351**示例:**
352
353```ts
354import { JSON } from '@kit.ArkTS';
355
356const jsonText = '{"name": "John", "age": 30, "city": "ChongQing"}';
357let inputObj = JSON.parse(jsonText);
358JSON.remove(inputObj, "name");
359let result = JSON.has(inputObj, "name");
360console.info("result = " + result);
361// 打印结果:result = false
362```