HarmonyOS JSON解析与生成 常用的几个方法
HarmonyOS 使用 JSON解析与生成 的好处
一、轻量级与高效性
- 易于阅读和编写:JSON格式的数据易于人类阅读和编写,降低了数据处理的复杂性。
- 高效解析与生成:HarmonyOS的JSON解析库提供了一系列高效的函数和类,能够快速地将JSON字符串转换为JSON对象,或将JSON对象转换为JSON字符串,从而满足高效数据处理的需求。
二、灵活的数据模型
- 层次化和嵌套的数据组织:JSON允许数据以层次化和嵌套的方式组织,这使得它能够适应各种复杂的数据结构。
- 支持多种数据类型:JSON中的值可以是字符串、数字、布尔值、数组、对象或null,这种灵活性使得JSON能够表示多种类型的数据。
三、广泛的应用场景
- 跨平台数据交换:JSON作为一种通用的数据格式,可以在不同的操作系统、设备和编程语言之间进行数据交换,这使得HarmonyOS能够与其他系统或设备进行无缝的数据通信。
- 适用于多种应用:无论是前端开发、移动应用开发还是物联网设备,JSON都因其轻量级和易于处理的特点而被广泛应用。在HarmonyOS中,JSON同样被广泛应用于数据的传递和存储。
四、强大的数据处理能力
- 数据访问与修改:通过解析JSON对象,可以方便地访问和修改其中的数据,提高了数据处理的灵活性。
- 数据验证与校验:在JSON数据解析过程中,可以进行数据的验证和校验,确保接收到的数据符合预期的格式和规则,从而提高了数据的准确性和可靠性。
五、安全性与稳定性
- 符合安全标准:HarmonyOS的JSON解析库在设计和实现过程中遵循了相关的安全标准和规范,确保了数据处理的安全性。
- 稳定可靠:经过严格的测试和验证,HarmonyOS的JSON解析库具有高度的稳定性和可靠性,能够满足各种复杂应用场景的需求。
本模块实现了JSON文本的解析与生成功能:能够高效地将JSON格式的文本转换为相应的JavaScript对象或值,同时也支持将JavaScript对象序列化为标准的JSON字符串。
JSON解析与生成
1. JSON.parse ---- 解析JSON字符串
2. JSON.stringify ---- 转换为JSON字符串
3. JSON.has ---- 是否包含
4. JSON.remove ---- 删除
1. JSON.parse
parse(text: string, reviver?: Transformer, options?: ParseOptions): Object | null
用于解析JSON字符串生成对应ArkTS对象或null。
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| text | string | 是 | 有效的JSON字符串。 |
| reviver | Transformer | 否 | 转换函数,传入该参数,可以用来修改解析生成的原始值。默认值是undefined。 |
| options | ParseOptions | 否 | 解析的配置,传入该参数,可以用来控制解析生成的类型。默认值是undefined。 |
返回值:
| 类型 | 说明 |
|---|---|
| Object | null | 返回ArkTS对象或null。当入参是null时,返回null。 |
使用方式一:
传入有效的JSON字符串。
let jsonText = '{"name": "John", "age": 30, "city": "ChongQing"}';
let obj:object = JSON.parse(jsonText);
console.info((obj as object)?.["name"]); // 输出 John
输出:
输出结果:John
使用方式二:
转换函数,传入该参数,可以用来修改解析生成的原始值
function reviverFunc(key, value) {if (key === "age") {return value + 1;}return value;
}const jsonTextStr = '{"name": "John", "age": 30}';
let objRst:object = JSON.parse(jsonTextStr, reviverFunc);
console.info((objRst as object)?.["age"]); // 打印结果:31 输出:
输出结果:31
使用方式三:
解析的配置,传入该参数,可以用来控制解析生成的类型
let options: JSON.ParseOptions = {bigIntMode: JSON.BigIntMode.PARSE_AS_BIGINT,}let numberText = '{"largeNumber":11223344556677889911111}';let numberObj = JSON.parse(numberText,(key: string, value: string):Object | null => {if(key === "largeNumber"){console.info("password",value+"");return value;}return value;},options);console.info((numberObj as object)?.["largeNumber"]);// 打印结果: 11223344556677889911111
输出:
输出结果:11223344556677889911111
2. JSON.stringify
stringify(value: Object, replacer?: (number | string)[] | null, space?: string | number): string
该方法将一个ArkTS对象或数组转换为JSON字符串,对于容器支持线性容器转换,非线性的容器不支持。
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| value | Object | 是 | ArkTS对象或数组,对于容器支持线性容器转换,非线性的容器不支持。 |
| replacer | number[] | string[] | null | 否 | 当参数是数组时,只有包含在这个数组中的属性名才会被序列化到最终的JSON字符串中;当参数为null或者未提供时,则对象所有的属性都会被序列化。默认值是undefined。 |
| space | string | number | 否 | 指定缩进用的空格或字符串或空字符串,用于美化输出。当参数是数字时表示有多少个空格;当参数是字符串时,该字符串被当作空格;当参数没有提供时,将没有空格。默认值是空字符串。 |
返回值:
| 类型 | 说明 |
|---|---|
| string | 转换后的JSON字符串。 |
使用方式一:
ArkTS对象或数组,对于容器支持线性容器转换,非线性的容器不支持。
let arr = [1, 2];
let rstArrStr = JSON.stringify(exportObj, arr);
console.info(rstArrStr);
// 打印结果:"{"1":"John","2":30}"
输出:
输出结果:{"1":"John","2":30}
使用方式二:
当参数是数组时,只有包含在这个数组中的属性名才会被序列化到最终的JSON字符串中;当参数为null或者未提供时,则对象所有的属性都会被序列化
interface Person {name: string;age: number;city: string;}
let inputObj = {"name": "John", "age": 30, "city": "ChongQing"} as Person;
let rstStr = JSON.stringify(inputObj, ["name"]);
console.info("rstStr",rstStr);
// 打印结果:"{"name":"John"}"
输出:
输出结果:"{"name":"John"}"
使用方式三:
指定缩进用的空格或字符串或空字符串,用于美化输出。当参数是数字时表示有多少个空格;当参数是字符串时,该字符串被当作空格;当参数没有提供时,将没有空格
interface Person {name: string;age: number;city: string;}
let rstStrSpace = JSON.stringify(inputObj, ["name"], ' ');
console.info(rstStrSpace);
// 打印结果:
/*
"{"name": "John"
}"
*/let rstStrStar = JSON.stringify(inputObj, ["name"], '&&');
console.info(rstStrStar);
// 打印结果:
/*
"{
&&"name": "John"
}"
*/
3. JSON.has
has(obj: object, property: string): boolean
检查ArkTS对象是否包含某种属性,可用于JSON.parse解析JSON字符串之后的相关操作。has接口仅支持最外层为字典形式(即大括号而非中括号包围)的合法json串。
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| obj | object | 是 | ArkTS对象。 |
| property | string | 是 | 属性名。 |
返回值:
| 类型 | 说明 |
|---|---|
| boolean | 返回ArkTS对象是否包含某种属性结果,true表示包含,false表示不包含。 |
使用方式:
const jsonText = '{"name": "John", "age": 30, "city": "ChongQing"}';
let inputObj = JSON.parse(jsonText);
let rstflag = JSON.has(inputObj, "name");
console.info("rstflag = " + rstflag);
// 打印结果:rstflag = true
输出:
输出结果:rstflag = true
4. JSON.remove
remove(obj: object, property: string): void
从ArkTS对象中删除某种属性,可用于JSON.parse解析JSON字符串之后的相关操作。remove接口仅支持最外层为字典形式(即大括号而非中括号包围)的合法json串。
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| obj | object | 是 | ArkTS对象。 |
| property | string | 是 | 属性名。 |
使用方式:
const jsonText = '{"name": "John", "age": 30, "city": "ChongQing"}';
let inputObj = JSON.parse(jsonText);
JSON.remove(inputObj, "name");
let rstflag = JSON.has(inputObj, "name");
console.info("rstflag = " + rstflag);
// 打印结果:rstflag = false
输出:
输出结果:rstflag = false
还有其他问题 请参考官方文档
制作不易 点个关注再走吧。°(°¯᷄◠¯᷅°)°。
相关文章:
HarmonyOS JSON解析与生成 常用的几个方法
HarmonyOS 使用 JSON解析与生成 的好处 一、轻量级与高效性 易于阅读和编写:JSON格式的数据易于人类阅读和编写,降低了数据处理的复杂性。高效解析与生成:HarmonyOS的JSON解析库提供了一系列高效的函数和类,能够快速地将JSON字符串…...
Docker 进阶指南:常用命令、最佳实践与资源管理
Docker 进阶指南:常用命令、最佳实践与资源管理 Docker 作为一种轻量级的容器化技术,已经成为现代软件开发和部署不可或缺的工具。本文将为您深入介绍 Docker 的常用命令、最佳实践以及如何有效管理容器资源,帮助您更好地在 Ubuntu 22.04 或…...
【前端】特殊案例分析深入理解 JavaScript 中的词法作用域
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 💯前言💯案例代码💯词法作用域(Lexical Scope)与静态作用域什么是词法作用域?代码执行的详细分析 💯函数定义与调用的…...
Jmeter进阶篇(29)AI+性能测试领域场景落地
🏝️关于我:我是綦枫。一个顺手写写代码的音乐制作人。 前言 随着2022年GPT3.5的问世,我们的社会已经进入了AI时代,这是一个全新的风口,也会迎来全新的挑战和机遇。如果能抓住新时代的风口,你将会在进步的路上越走越快。今天让我们来一起探究一下,在软件性能测试领域,…...
理解和应用 Python Requests 库中的 .json() 方法:详细解析与示例
理解和应用 Python Requests 库中的 .json() 方法:详细解析与示例 在使用 Python 的 requests 库进行网络请求时,.json() 方法是一种非常实用的功能,用于将从 API 获取的 JSON 格式的字符串响应转换为 Python 可操作的字典或列表。这一功能的…...
docker 运行my-redis命令
CREATE TABLE orders ( order_id bigint NOT NULL COMMENT "订单ID", dt date NOT NULL COMMENT "日期", merchant_id int NOT NULL COMMENT "商家ID", user_id int NOT NULL COMMENT "用户ID", good_id int NOT NULL COMMENT "商…...
cloudstack概要及单节点安装部署
概要 Apache CloudStack 是一个开源的云计算管理平台,用于管理和部署大规模的虚拟化环境,支持 IaaS(基础设施即服务)模型。它广泛应用于私有云、公共云和混合云场景。 核心功能 多租户支持 提供隔离的虚拟网络、计算资源和存储资…...
Android Gradle 相关
JDK环境配置: 1、Gradle运行时的JDK,即Gradle需要用到的JDK,配置如下: 如需修改现有项目的 Gradle JDK 配置,请依次点击 File(或者 macOS 上的 Android Studio)> Settings > Build, Exe…...
SpringMVC:入门案例
从此开始,我们步入SpringMVC的学习。 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架 先来看一下web程序是如何工作的: 因为是异步调用,所以后端不需要返回view视图,将其去除前端如果通过异步调用的方式进行交互࿰…...
LuaForWindows_v5.1.5-52.exe
Releases rjpcomputing/luaforwindows GitHub #lua C:\Users\Administrator\Desktop\test.lua print("Hello lua!") print("ZengWenFeng 13805029595")...
密码学实验工具--Cryptool2
一、 Cryptool2的下载与安装 请参考我的另一篇笔记 二、 Caesar密码 2.1 Caesar密码加解密 1. 在Starcenter中直接搜索caesar的模板。 2. 打开caesar Cipher的模板后,工作区上面已经有了输入框,密钥框,输出框 输入框:要加密…...
量化交易系统开发-实时行情自动化交易-8.1.TradingView平台
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来会对于TradingView平台介绍。 T…...
Vue2 常见知识点(二)
使用简单的代码逻辑,理一理实现逻辑 为了方便理解,案例中,没有使用虚拟dom和抽象语法树,是通过直接操作dom来实现的 1.模板语法 先看一个简单的实现: this.compile( this.$el ); 执行模板编译,如果是文本…...
SAP-ABAP开发-第二代增强示例
CUSTOMER EXIT 以VA01为例 目录 一、查找出口 二、出口对象 三、销售订单的增强 一、查找出口 ①查找事务代码的主程序 ②搜索CALL CUSTOMER-FUNCTION SE37下查看函数 函数名称命名规则:EXIT_<程序名>_<序号> ③使用函数查找:MODX_FU…...
UDP 协议与端口绑定行为解析:理解 IP 地址和端口的绑定规则
UDP 协议与端口绑定行为解析:理解 IP 地址和端口的绑定规则 1. UDP 协议与端口绑定基础2. UDP 端口绑定行为与示例3. 关键结论:占有权与消息接收权4. 异常现象:多个程序绑定 0.0.0.0:80805. 端口共享与操作系统的行为差异6. 实践建议与最佳实践7. 总结在网络通信中,UDP(用…...
【Vue3】【Naive UI】<n-message>标签
【Vue3】【Naive UI】标签 content (String | VNode) 【VUE3】【Naive UI】<NCard> 标签 【VUE3】【Naive UI】<n-button> 标签 【VUE3】【Naive UI】<a> 标签 【VUE3】【Naive UI】<NDropdown&…...
C++ 变量和常量:开启程序构建之门的关键锁钥与永恒灯塔
目录 一、变量 1.1 变量的创建 1.2 变量的初始化 1.3 变量的分类 1.4 变量的初始化 二、常量 2.1 字面常量 2.2 #define定义常量 2.3 const 定义常量 一、变量 1.1 变量的创建 data_type name; | | | | 数据类型 变量名 ------------- int age; //整型变量 char ch; …...
Linux部分实用操作
目录 1、快捷键 2、软件安装 3、systemctl 4、ln命令创建软连接 5、IP地址 6、主机名 7、域名解析 8、网络传输 ping wget curl命令 9、端口 10、进程 11、主机状态 查看系统资源占用--top 磁盘信息监控--df--iostat 网络状态监控--sar -n DEV 12、环境…...
Linux笔记---进程:进程地址空间
1. 地址空间 程序地址空间是指程序在执行期间可以访问的内存范围。它由操作系统为每个进程分配,以确保进程之间不会相互干扰。地址空间包含了程序所需的所有内存区域,包括代码、已初始化和未初始化的数据、堆(heap)、栈ÿ…...
flutter in_app_purchase google支付 PG-GEMF-01错误
问题:PG-GEMF-01错误 flutter 使用in_app_purchase插件升降级订阅时报错PG-GEMF-01。 解决方案: 升降级订阅时,确保不调用 MethodCallHandlerImpl.java文件中的 setObfuscatedAccountId()方法、setObfuscatedProfileId()方法 原因…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
