当前位置: 首页 > news >正文

鸿蒙next json解析 ArkUI 带你玩转 arkts json解析

前言导读

相信很多同学再开发过程中都会遇到json解析的处理,不管是跟服务端交互 或者是读取本地的json 都会遇到json解析 那么正好今天有空正好讲一下鸿蒙next里面的json解析

JSON解析与生成

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

导入模块

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

解析json
  • 使用 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.
  • 具体示例
    let jsonText = '{"name": "John", "age": 30, "city": "ChongQing"}';let obj = JSON.parse(jsonText);console.info("getname --- > "+ (obj as object)?.["name"]);console.info("getage --- > "+ (obj as object)?.["age"]);console.info("getcity --- > "+ (obj as object)?.["city"]);

我们通过 JSON.parse 方法得到我们的 obj 对象 然后 (obj as object)?.[“name”] 来取值

我们看下打印效果

在这里插入图片描述

  • 通过 interface 配合 JSON.parse 解析数据
interface Person {name: string;age: number;city: string;
}
let jsonText = '{"name": "John", "age": 30, "city": "ChongQing"}';
let person:Person=JSON.parse(jsonText)as Person;
console.info("personinterface  getpersonname--- > "+ person.name);
console.info("personinterface getpersonage--- > "+ person.age);
console.info("personinterface getpersoncity--- > "+ person.city);
  • 我们查看打印效果

在这里插入图片描述

  • 通过一个class配合 JSON.parse 解析数据
class  Persontest {name: string='';age: number=0;city: string='';}let jsonText = '{"name": "John", "age": 30, "city": "ChongQing"}';let persontest:Persontest=JSON.parse(jsonText.toString()) as Persontest;console.info("personclass getpersontest--- > "+ persontest.name);console.info("personclass getpersontest--- > "+ persontest.age);console.info("personclass getpersontest--- > "+ persontest.city);
  • 我们查看打印效果

在这里插入图片描述

对象或者数组转json JSON.stringify

该方法将一个ArkTS对象或数组转换为JSON字符串,对于容器支持线性容器转换,非线性的容器不支持。
元服务API: 从API version 12开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:

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

返回值:

类型说明
string转换后的JSON字符串。
具体案例
  • 将arkts对象转成json
interface Person {name: string;age: number;city: string;
}
let testobj = {"name": "John", "age": 30, "city": "ChongQing"} as Person;
let str1 = JSON.stringify(testobj);
console.info("jsonstringify getstr1--- > "+ str1);

在这里插入图片描述

  • 将arkts 数组转成json
  export  interface Persondemo {name: string;age: number;city: string;}persons:Persondemo[] = [{ name: "徐庆", age: 31,city:"湖北"},{ name: "宇智波斑", age: 80,city:"宇智波"},{ name: "万祐宁", age: 30,city:"湖北"},{ name: "千手柱间", age: 79,city:"木叶"},{ name: "我爱罗", age: 28,city:"沙影村"},{ name: "佩恩", age: 34,city:"雨影村"},]let getpersons = JSON.stringify(this.persons);
console.info("jsonstringify getpersons--- > "+ getpersons);
  • 转换之后结果
` [{"name":"徐庆","age":31,"city":"湖北"},{"name":"宇智波斑","age":80,"city":"宇智波"},{"name":"万祐宁","age":30,"city":"湖北"},{"name":"千手柱间","age":79,"city":"木叶"},{"name":"我爱罗","age":28,"city":"沙影村"},{"name":"佩恩","age":34,"city":"雨影村"}]`

在这里插入图片描述

  • JSON.has

has(obj: object, property: string): boolean
检查ArkTS对象是否包含某种属性,可用于JSON.parse解析JSON字符串之后的相关操作。has接口仅支持最外层为字典形式(即大括号而非中括号包围)的合法json串。
元服务API: 从API version 12开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
objobjectArkTS对象。
propertystring属性名。

返回值:

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

错误码:

以下错误码的详细介绍请参见通用错误码。

错误码ID错误信息
401Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter
  • 具体案例
  let jsonText = '{"name": "John", "age": 30, "city": "ChongQing"}';let obj = JSON.parse(jsonText);let hasrst = JSON.has(obj, "name");console.info("getrst --- > "+ hasrst);
  • 查看打印效果

我们可以查看到如果has包含了我们json字符串里面的key值就返回true 反之不包含就返回false
在这里插入图片描述

JSON.remove

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

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

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

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
objobjectArkTS对象。
propertystring属性名。

错误码:

以下错误码的详细介绍请参见通用错误码。

错误码ID错误信息
401Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.
 let jsonText = '{"name": "John", "age": 30, "city": "ChongQing"}';let obj = JSON.parse(jsonText);let hasrst = JSON.has(obj, "name");let removerst = JSON.remove(obj, "name");let gethasrst = JSON.has(obj, "name");console.info("indexgetrst --- > "+ hasrst);console.info("indexgethasrst --- > "+ gethasrst);
查看打印结果

在这里插入图片描述

我们可以观察到我们删除前后 删除前调用 JSON.has 前我们的返回true 证明json里面包含 name 这个字段 我们在执行了 JSON.remove 再去查询的时候就返回false了,证明我们的api方法执行成功了。

最后总结

arkts 里面的提供丰富的api来解析我们的json ,对比其他端来说也是相对比较简单 对于复杂的json 我们可以定义一个 interface 或者一个class 来配合我们的,JSON.parse 来进行解析复杂的json数据 当然这个生成数据模型model 我们团队有开发一个插件,这样也大大方便我们开发。那么更多的json解析和处理数据结构的各位同学可以关注我掘金的专栏。

插件地址 JsonFormat

https://juejin.cn/post/7397331539850477608

读取本地json

https://juejin.cn/post/7399530589987028992

如果需要学习更多鸿蒙的知识可以关注我B站教程

课程地址

B站课程地址:www.bilibili.com/cheese/play…

项目内容:

相关文章:

鸿蒙next json解析 ArkUI 带你玩转 arkts json解析

前言导读 相信很多同学再开发过程中都会遇到json解析的处理,不管是跟服务端交互 或者是读取本地的json 都会遇到json解析 那么正好今天有空正好讲一下鸿蒙next里面的json解析 JSON解析与生成 本模块提供了将JSON文本转换为JSON对应对象或值,以及将对象…...

东土科技加码芯片业务投资,携手神经元共建新型工业生态

为抢抓国产化芯片发展的重大机遇,东土科技决定进一步加大对神经元信息技术(成都)有限公司的投资。这一战略布局有利于东土科技鸿道Intewell工业操作系统与神经元公司芯片的深度协同,推动实现“信息技术、网络技术、控制技术、数字…...

指纹与指甲检测系统源码分享

指纹与指甲检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…...

C++3D迷宫

目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #include <iostream> using namespace std; void printmaze(char strmaze[5][5][5]) {cout << "-----" << endl;int i 0;int ia 0…...

跨界融合,GIS如何赋能游戏商业——以《黑神话:悟空》为例

在数字化时代&#xff0c;地理信息系统&#xff08;GIS&#xff09;技术正以其独特的空间分析和可视化能力&#xff0c;为游戏产业带来革命性的变革。《黑神话&#xff1a;悟空》作为中国首款3A级别的动作角色扮演游戏&#xff0c;不仅在游戏设计和技术上取得了突破&#xff0c…...

【计网】从零开始使用TCP进行socket编程 --- 客户端与服务端的通信实现

阵雨后放晴的天空中&#xff0c; 出现的彩虹很快便会消失。 而人心中的彩虹却永不会消失。 --- 太宰治 《斜阳》--- 从零开始使用TCP进行socket编程 1 TCP与UDP2 TCP服务器类2.1 TCP基础知识2.2 整体框架设计2.3 初始化接口2.4 循环接收接口与服务接口 3 服务端与客户端测试…...

Imagen:重塑图像生成领域的革命性突破

目录 引言 一、Imagen模型的技术原理 1. 模型概述 2. 工作流程 3. 技术创新 二、Imagen模型的应用实例 1. 创意设计 2. 虚拟角色制作 3. 概念可视化 三、Imagen模型的优势与挑战 1. 优势 2. 挑战 四、Imagen模型的未来发展方向 1. 图像生成质量的提升 2. 多模态…...

Golang | Leetcode Golang题解之第402题移掉K位数字

题目&#xff1a; 题解&#xff1a; func removeKdigits(num string, k int) string {stack : []byte{}for i : range num {digit : num[i]for k > 0 && len(stack) > 0 && digit < stack[len(stack)-1] {stack stack[:len(stack)-1]k--}stack app…...

c++ gtsam/inference/Symbol.h 详细介绍

gtsam/inference/Symbol.h 是 GTSAM 库中的一个头文件&#xff0c;定义了 Symbol 类。这个类用于在因子图优化中标识和管理变量。Symbol 提供了一种便捷的方式来创建和使用唯一标识符&#xff0c;从而避免手动管理复杂的整数键。 Symbol 类详细介绍 Symbol 类是 GTSAM 中用于…...

apache文件共享和访问控制

实现apache文件共享 文件共享路径 <Directory "/var/www/html"> #默认发布路径&#xff0c;功能限制 Options Indexes FollowSymLinks #indexes支持文件共享功能 AllowOverride None Require all granted </Directory> 进入到该路径下 cd…...

LeetCode 2398.预算内的最多机器人数目:滑动窗口+单调队列——思路清晰的一篇题解

【LetMeFly】2398.预算内的最多机器人数目&#xff1a;滑动窗口单调队列——思路清晰的一篇题解 力扣题目链接&#xff1a;https://leetcode.cn/problems/maximum-number-of-robots-within-budget/ 你有 n 个机器人&#xff0c;给你两个下标从 0 开始的整数数组 chargeTimes …...

vue 在线预览word和excel

yarn add vue-office/excel vue-office/docx <template><div><vue-office-docx:src"docx"style"height: 100%; margin: 0; padding: 0"rendered"rendered"/></div> </template><script> //引入VueOfficeDoc…...

物联网智能项目

物联网智能项目是一个涉及多个领域和技术的综合性项目&#xff0c;旨在通过互联网将各种物理设备连接起来&#xff0c;实现数据的采集、传输、处理和分析&#xff0c;进而实现智能化控制和管理。以下是对物联网智能项目的详细阐述&#xff0c;包括其定义、关键技术、应用领域、…...

828华为云征文|Flexus云服务器X:Python安装的极致便捷之旅

目录 前言 一、Flexus云服务器X介绍 1.1 Flexus云服务器X实例简介 1.2 Flexus云服务器X实例特点 1.3 Flexus云服务器X实例场景需求 二、Flexus云服务器X购买 2.1 Flexus X实例购买 2.2 重置密码 2.3 登录服务器 三、Flexus云服务器X安装Python 3.1 Python下载 3.2 Python安装 3…...

Midjourney中秋特典-12张图附魔咒

第一张 魔咒 A Mid-Autumn Festival poster, a round bright moon, a Chinese-style pavilion with a scene of a reunion from Dream of the Red Chamber, a new Chinese style --ar 3:4 --v 6.1第二张 魔咒 The bright full moon hung in the night sky,clear in outline a…...

编写程序,从键盘输入若干整数,将其保存入一个数组中。利用Arravs进行排序,然后查找出第3大的整数

编写程序&#xff0c;从键盘输入若干整数&#xff0c;将其保存入一个数组中。利用Arravs进行排序&#xff0c;然 后查找出第3大的整数 import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner;public class helloworld {public static void main(Stri…...

VSCode 离线安装中文语言包

1.插件市场 Extensions for Visual Studio family of products | Visual Studio Marketplace 输入&#xff1a; language 在version history里面下载相应的版本&#xff0c;若没有就下载最新的 在下面安装 安装完重启就可以了。 可能会提示的失败&#xff1a; Unable to ins…...

vue3补充

form表单重置 const { proxy } getCurrentInstance()!; // 获取挂载在全局的上下文proxy.resetForm(ruleFormRef); // 在el-form中清空ref为ruleFormRef的表单注&#xff1a;不推荐使用 不推荐的原因 类型安全问题&#xff1a; 当在 TypeScript 环境中使用时&#xff0c;…...

关于Chrome浏览器没有网络,而其他浏览器正常这一问题的解决方法

网上有很多解决方案&#xff0c;但我尝试了之后都没有效果。后来尝试开启了VPN&#xff0c;问题完美解决了。 ✿✿ヽ(▽)ノ✿ 解决前&#xff1a;打开VPN后很容易就解决了&#xff1a;...

人工智能辅助汽车造型设计

随着科技的不断进步&#xff0c;人工智能&#xff08;AI&#xff09;在各个领域的应用越来越广泛&#xff0c;汽车设计行业也不例外。尤其在车辆外观造型设计中&#xff0c;AI正在成为设计师的重要助手&#xff0c;通过提供强大的工具和独特的创意方式&#xff0c;革新了传统设…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...