当前位置: 首页 > 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;革新了传统设…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

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

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

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知&#xff0c;帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量&#xff0c;能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度&#xff0c;还为机器人、医疗设备和制造业的智…...