OpenHarmony: 如何指定对象属性参与序列化
一、序列化需求与 JSON.stringify() 接口
在 ArkTS 编程中,常常会面临将对象转换为 JSON 字符串的需求,而在这个过程中,有时我们并不希望对象的所有属性都参与序列化,而是仅指定某些属性进行转换。JSON.stringify()
接口为我们提供了强大的功能来实现这一目标。该接口的定义为 stringify(value: Object, replacer?: (number | string)[] | null, space?: string | number): string
,其中关键的参数 replacer
为我们控制属性的序列化提供了便利。
二、replacer 参数的作用机制
当 replacer
为数组时,它就像是一把筛选器,只有那些包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中。这使得我们能够精准地选择需要序列化的对象属性,从而得到更符合需求的 JSON 数据。例如,在某些场景下,我们可能只关心对象中的部分关键信息,如用户对象中的姓名和年龄,而其他信息如注册时间、上次登录时间等则无需在当前序列化操作中包含。通过将 replacer
设置为包含 name
和 age
的数组,就可以轻松实现仅这两个属性的序列化。
相反,当 replacer
参数为 null
或者未提供时,JSON.stringify()
会遵循默认的行为,即对象所有的属性都会被序列化。这种全量序列化在某些情况下也是必要的,比如需要完整保存对象的所有信息以便后续的全面恢复或处理。
三、上代码
import { JSON } from '@kit.ArkTS';
interface Person {
name: string;
age: number;
city: string;
}
let obj: Person = { name: 'John', age: 30, city: 'ChongQing' };
@Entry
@Component
struct JSONDemo {
@State str: string = 'to json';
build() {
Row() {
Column() {
Button(this.str)
.onClick(() => {
let jsonStr1 = JSON.stringify(obj); // 所有属性都进行序列化
console.info('jsonStr1:', jsonStr1); // jsonStr1: {"name":"John","age":30,"city":"ChongQing"}
let jsonStr2 = JSON.stringify(obj, ['name']); // 指定name属性,进行序列化
console.info('jsonStr2:', jsonStr2); // jsonStr2: {"name":"John"}
})
}
.width('100%')
}
.height('100%')
}
}
首先定义了一个 Person
接口,包含 name
、age
和 city
三个属性。接着创建了一个 Person
类型的对象 obj
,并初始化了相应的属性值。在 JSONDemo
组件的构建函数 build()
里,创建了一个包含按钮的布局结构。当按钮被点击时,会执行两个 JSON.stringify()
操作。
第一个操作 JSON.stringify(obj)
由于未提供 replacer
参数,按照默认规则,对象 obj
的所有属性都参与序列化,生成的 JSON 字符串包含了 name
、age
和 city
三个属性的信息,即 {"name":"John","age":30,"city":"ChongQing"}
。
第二个操作 JSON.stringify(obj, ['name'])
,通过将 replacer
设置为只包含 name
属性的数组,使得只有 name
属性被序列化到最终的 JSON 字符串中,结果为 {"name":"John"}
。这清晰地展示了 replacer
参数在控制对象属性序列化过程中的关键作用,提高了 ArkTS 应用在数据处理和传输方面的灵活性与精准性。
- 1回答
- 0粉丝
- 0关注
- OpenHarmony: 解决反序列化时number类型精度丢失
- 参与OpenHarmony开源项目的方式
- OpenHarmony 动画大全01-属性动画
- OpenHarmony 开发的艺术 面向对象
- 如何获取状态管理框架代理前的原始对象
- 文件详细属性信息
- 文件的扩展属性
- 【HarmonyOS NEXT】如何给未知类型对象定义类型并使用递归打印所有的Key
- OpenHarmony 如何优雅的编写注释
- OpenHarmony: 如何主动退出整个应用
- OpenHarmony: 如何获取当前HAP的BundleName
- OpenHarmony: 如何删除Record中的元素
- OpenHarmony: 如何查询应用包的信息
- OpenHarmony 如何实现防截屏功能
- OpenHarmony应用如何一键置灰