首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

鸿蒙NEXT开发:ArkTS [email protected] (JSON解析与生成)

  • 25-04-25 09:21
  • 2348
  • 7522
blog.csdn.net

 往期鸿蒙5.0全套实战文章必看:(文中附带全栈鸿蒙5.0学习资料)

  • 鸿蒙开发核心知识点,看这篇文章就够了

  • 最新版!鸿蒙HarmonyOS Next应用开发实战学习路线

  • 鸿蒙HarmonyOS NEXT开发技术最全学习路线指南

  • 鸿蒙应用开发实战项目,看这一篇文章就够了(部分项目附源码)


@ohos.util.json (JSON解析与生成)

本模块提供了将JSON文本转换为JSON对应对象或值,以及将对象转换为JSON字符串等功能。

说明

本模块首批接口从API version 12开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

导入模块

import { JSON } from '@kit.ArkTS';

Transformer

type Transformer = (this: Object, key: string, value: Object) => Object | undefined | null

用于转换结果函数的类型。

作为JSON.parse函数的参数时,对象的每个成员将会调用此函数,解析过程中允许对数据进行自定义处理或转换。

作为JSON.stringify函数的参数时,在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
thisObject是在解析的键值对所属的对象。
keystring是属性名。
valueObject是在解析的键值对的值。

返回值:

类型说明
Object | undefined | null返回修改后的对象或undefined或null。

BigIntMode

定义处理BigInt的模式。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Utils.Lang

名称值说明
DEFAULT0不支持BigInt。
PARSE_AS_BIGINT1当整数小于-(2^53-1)或大于(2^53-1)时,解析为BigInt。
ALWAYS_PARSE_AS_BIGINT2所有整数都解析为BigInt。

ParseOptions

解析的选项,可定义处理BigInt的模式。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Utils.Lang

名称类型必填说明
bigIntModeBigIntMode是定义处理BigInt的模式。

JSON.parse

parse(text: string, reviver?: Transformer, options?: ParseOptions): Object | null

用于解析JSON字符串生成对应ArkTS对象或null。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
textstring是有效的JSON字符串。
reviverTransformer否转换函数,传入该参数,可以用来修改解析生成的原始值。默认值是undefined。
optionsParseOptions否解析的配置,传入该参数,可以用来控制解析生成的类型。默认值是undefined。

返回值:

类型说明
Object | null返回ArkTS对象或null。当入参是null时,返回null。

错误码:

以下错误码的详细介绍。

错误码ID错误信息
401Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed.

示例:

  1. // /entry/src/main/ets/pages/test.ts
  2. export function reviverFunc(key, value) {
  3. if (key === "age") {
  4. return value + 1;
  5. }
  6. return value;
  7. }
  1. import { JSON } from '@kit.ArkTS';
  2. import { reviverFunc } from './test';
  3. let jsonText = '{"name": "John", "age": 30, "city": "ChongQing"}';
  4. let obj = JSON.parse(jsonText);
  5. console.info((obj as object)?.["name"]);
  6. // 打印结果:John
  7. const jsonTextStr = '{"name": "John", "age": 30}';
  8. let objRst = JSON.parse(jsonTextStr, reviverFunc);
  9. console.info((objRst as object)?.["age"]);
  10. // 打印结果:31
  11. let options: JSON.ParseOptions = {
  12. bigIntMode: JSON.BigIntMode.PARSE_AS_BIGINT,
  13. }
  14. let numberText = '{"largeNumber":112233445566778899}';
  15. let numberObj = JSON.parse(numberText,(key: string, value: Object | undefined | null): Object | undefined | null => {
  16. if(key === "largeNumber") return value;
  17. return value;
  18. },options) as Object;
  19. console.info((numberObj as object)?.["largeNumber"]);
  20. // 打印结果: 112233445566778899

JSON.stringify

stringify(value: Object, replacer?: (number | string)[] | null, space?: string | number): string

该方法将一个ArkTS对象或数组转换为JSON字符串,对于容器支持线性容器转换,非线性的容器不支持。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
valueObject是ArkTS对象或数组,对于容器支持线性容器转换,非线性的容器不支持。
replacernumber[] | string[] | null否当参数是数组时,只有包含在这个数组中的属性名才会被序列化到最终的JSON字符串中;当参数为null或者未提供时,则对象所有的属性都会被序列化。默认值是undefined。
spacestring | number否指定缩进用的空格或字符串或空字符串,用于美化输出。当参数是数字时表示有多少个空格;当参数是字符串时,该字符串被当作空格;当参数没有提供时,将没有空格。默认值是空字符串。

返回值:

类型说明
string转换后的JSON字符串。

错误码:

以下错误码的详细介绍。

错误码ID错误信息
401Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed.

示例:

  1. // /entry/src/main/ets/pages/test.ts
  2. export let exportObj = {1: "John", 2: 30, 3: "New York"};
  1. import { JSON } from '@kit.ArkTS';
  2. import { exportObj } from './test';
  3. let arr = [1, 2];
  4. let rstArrStr = JSON.stringify(exportObj, arr);
  5. console.info(rstArrStr);
  6. // 打印结果:"{"1":"John","2":30}"
  7. interface Person {
  8. name: string;
  9. age: number;
  10. city: string;
  11. }
  12. let inputObj = {"name": "John", "age": 30, "city": "ChongQing"} as Person;
  13. let rstStr = JSON.stringify(inputObj, ["name"]);
  14. console.info(rstStr);
  15. // 打印结果:"{"name":"John"}"
  16. let rstStrSpace = JSON.stringify(inputObj, ["name"], ' ');
  17. console.info(rstStrSpace);
  18. // 打印结果:
  19. /*
  20. "{
  21. "name": "John"
  22. }"
  23. */
  24. let rstStrStar = JSON.stringify(inputObj, ["name"], '&&');
  25. console.info(rstStrStar);
  26. // 打印结果:
  27. /*
  28. "{
  29. &&"name": "John"
  30. }"
  31. */

JSON.stringify

stringify(value: Object, replacer?: Transformer, space?: string | number): string

该方法将一个ArkTS对象或数组转换为JSON字符串,对于容器支持线性容器转换,非线性的容器不支持。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
valueObject是ArkTS对象或数组,对于容器支持线性容器转换,非线性的容器不支持。
replacerTransformer否在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理。默认值是undefined。
spacestring | number否指定缩进用的空格或字符串或空字符串,用于美化输出。当参数是数字时表示有多少个空格;当参数是字符串时,该字符串被当作空格;当参数没有提供时,将没有空格。默认值是空字符串。

返回值:

类型说明
string转换后的JSON字符串。

错误码:

以下错误码的详细介绍。

错误码ID错误信息
401Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed.

示例:

  1. // /entry/src/main/ets/pages/test.ts
  2. export function replacer(key: string, value: Object): Object {
  3. if (typeof value === "string") {
  4. return value.toUpperCase();
  5. }
  6. return value;
  7. }
  1. import { JSON } from '@kit.ArkTS';
  2. import { replacer } from './test';
  3. interface Person {
  4. name: string;
  5. age: number;
  6. city: string;
  7. }
  8. let inputObj = {"name": "John", "age": 30, "city": "ChongQing"} as Person;
  9. let rstStr= JSON.stringify(inputObj, replacer);
  10. console.info(rstStr);
  11. // 打印结果:"{"name":"JOHN","age":30,"city":"CHONGQING"}"
  12. let rstStrSpace= JSON.stringify(inputObj, replacer, ' ');
  13. console.info(rstStrSpace);
  14. // 打印结果:
  15. /*
  16. "{
  17. "name": "JOHN",
  18. "age": 30,
  19. "city": "CHONGQING"
  20. }"
  21. */
  22. let rstStrSymbol= JSON.stringify(inputObj, replacer, '@@@');
  23. console.info(rstStrSymbol);
  24. // 打印结果:
  25. /*
  26. "{
  27. @@@"name": "JOHN",
  28. @@@"age": 30,
  29. @@@"city": "CHONGQING"
  30. }"
  31. */

JSON.has

has(obj: object, property: string): boolean

检查ArkTS对象是否包含某种属性,可用于JSON.parse解析JSON字符串之后的相关操作。has接口仅支持最外层为字典形式(即大括号而非中括号包围)的合法json串。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
objobject是ArkTS对象。
propertystring是属性名。

返回值:

类型说明
boolean返回ArkTS对象是否包含某种属性结果,true表示包含,false表示不包含。

错误码:

以下错误码的详细介绍。

错误码ID错误信息
401Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.

示例:

  1. import { JSON } from '@kit.ArkTS';
  2. const jsonText = '{"name": "John", "age": 30, "city": "ChongQing"}';
  3. let inputObj = JSON.parse(jsonText);
  4. let result = JSON.has(inputObj, "name");
  5. console.info("result = " + result);
  6. // 打印结果:result = true

JSON.remove

remove(obj: object, property: string): void

从ArkTS对象中删除某种属性,可用于JSON.parse解析JSON字符串之后的相关操作。remove接口仅支持最外层为字典形式(即大括号而非中括号包围)的合法json串。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
objobject是ArkTS对象。
propertystring是属性名。

错误码:

以下错误码的详细介绍。

错误码ID错误信息
401Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.

示例:

  1. import { JSON } from '@kit.ArkTS';
  2. const jsonText = '{"name": "John", "age": 30, "city": "ChongQing"}';
  3. let inputObj = JSON.parse(jsonText);
  4. JSON.remove(inputObj, "name");
  5. let result = JSON.has(inputObj, "name");
  6. console.info("result = " + result);
  7. // 打印结果:result = false

注:本文转载自blog.csdn.net的奋斗的小野猪的文章"https://blog.csdn.net/ZPYQAQ/article/details/146094673"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

135
HarmonyOS
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top