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

javascript 复制代码
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字符串。

javascript 复制代码
let jsonText = '{"name": "John", "age": 30, "city": "ChongQing"}';
let obj:object = JSON.parse(jsonText);
console.info((obj as object)?.["name"]);  // 输出 John

输出:

输出结果:John

使用方式二:

转换函数,传入该参数,可以用来修改解析生成的原始值

javascript 复制代码
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

使用方式三:

解析的配置,传入该参数,可以用来控制解析生成的类型

javascript 复制代码
 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

javascript 复制代码
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对象或数组,对于容器支持线性容器转换,非线性的容器不支持。

javascript 复制代码
let arr = [1, 2];
let rstArrStr = JSON.stringify(exportObj, arr);
console.info(rstArrStr);
// 打印结果:"{"1":"John","2":30}"

输出:

输出结果:{"1":"John","2":30}

使用方式二:

当参数是数组时,只有包含在这个数组中的属性名才会被序列化到最终的JSON字符串中;当参数为null或者未提供时,则对象所有的属性都会被序列化

javascript 复制代码
 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"}"

使用方式三:

指定缩进用的空格或字符串或空字符串,用于美化输出。当参数是数字时表示有多少个空格;当参数是字符串时,该字符串被当作空格;当参数没有提供时,将没有空格

javascript 复制代码
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

javascript 复制代码
has(obj: object, property: string): boolean

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

参数:

参数名 类型 必填 说明
obj object ArkTS对象。
property string 属性名。

返回值:

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

使用方式:

javascript 复制代码
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

javascript 复制代码
remove(obj: object, property: string): void

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

参数:

参数名 类型 必填 说明
obj object ArkTS对象。
property string 属性名。

使用方式:

javascript 复制代码
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

还有其他问题 请参考官方文档

制作不易 点个关注再走吧。°(°¯᷄◠¯᷅°)°。

相关推荐
不爱吃糖的程序媛37 分钟前
如何判断Flutter三方库是否需要OHOS适配开发?附完整适配指导
flutter·华为·harmonyos
小雨下雨的雨1 小时前
HarmonyOS 应用开发实战:高精图像处理与头像裁剪持久化技术深度解析
图像处理·人工智能·华为·ai·交互·harmonyos·鸿蒙系统
奔跑的呱呱牛1 小时前
geojson-to-kml (KML 格式转换工具)
arcgis·json
讯方洋哥1 小时前
HarmonyOS App开发——职前通应用App开发(上)
华为·harmonyos
江湖有缘1 小时前
基于华为openEuler部署Sqliteviz轻量级SQLite可视化工具
jvm·华为·sqlite
洋九八2 小时前
Hi3861 OpenHarmony 多线程操作、Timer 定时器、点灯、 IO 相关设备控制
开发语言·华为·harmonyos
芒鸽2 小时前
基于 lycium 适配鸿蒙版 Ruby 的解决方案
华为·ruby·harmonyos
一起养小猫2 小时前
Flutter for OpenHarmony 实战:打造功能完整的记账助手应用
android·前端·flutter·游戏·harmonyos
一起养小猫2 小时前
Flutter for OpenHarmony 实战:打造功能完整的云笔记应用
网络·笔记·spring·flutter·json·harmonyos
一起养小猫2 小时前
Flutter for OpenHarmony 实战:笔记应用文件操作与数据管理详解
flutter·harmonyos