DevEco Studio-Cangjie Plugin 6.0.2 如何解析JSON为对象

DevEco Studio-Cangjie Plugin 6.0.2 如何解析JSON为对象 版本更新DevEco Studio-Cangjie Plugin 6.0.2后变化太大了,文档中也没找到serialization、encoding.json这些相关的文档,不知道怎么解析json了

12 回复

引入stdx就可以正常使用了,net、log 等库已从仓颉 SDK 移到 stdx 模块,使用前需要下载软件包,并在 cjpm.toml 中配置。


怎么申请通过的?我的还在审核中

希望HarmonyOS能继续推出更多实用的功能,满足用户的不同需求。

不清楚,周一上班发现有新版本就装了,

是下载中心那里有仓颉插件的新版本吗?我这儿还只能看到旧的,

你着急的话提个工单试试,

在 DevEco Studio 的 Cangjie Plugin 6.0.2 版本(对应 HarmonyOS NEXT API 12/13 附近)中,确实发生了重大变更。官方不再推荐使用旧的 JSON.stringify / JSON.parse 进行复杂对象的深拷贝或序列化,而是主推使用 @ohos.serialization 模块配合 装饰器 来实现类型安全的 JSON 解析。

有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

@ohos.serialization 是arkts的吗仓颉没有了吗,

应用配置文件(Stage模型)

每个应用项目必须在项目的代码目录下加入配置文件,这些配置文件会向编译工具、操作系统和应用市场提供应用的基本信息。

在基于Stage模型开发的应用项目代码下,都存在一个app.json5应用配置文件,和module.json5模块配置文件。

App.json5配置文件

app.json5包含应用的全局配置信息,包含应用的包名、开发厂商、版本号等基本信息。

属性 含义 数据类型 是否可缺省
bundleName 包名,用于标识应用的唯一性。 字符串
vendor 应用开发厂商名称。 字符串 可缺省,缺省值为空。
versionCode 用于标识应用的版本号,该版本号为32位非负整数。 数值
versionName 版本号文字描述,用于向用户展示。 字符串
minAPIVersion 支持运行的最小API版本。 数值
targetAPIVersion 目标API版本。 数值
apiReleaseType 目标API版本的类型,采用字符串类型表示。取值为“CanaryN”、“BetaN”或者“Release”,其中N代表大于零的整数。 字符串 可缺省,缺省值为空。
icon 应用图标,标签值为图标资源文件的索引。 字符串 可缺省,缺省值为空。
label 应用名,标签值为应用名资源文件的索引。 字符串 可缺省,缺省值为空。
description 应用描述,标签值为描述资源文件的索引。 字符串 可缺省,缺省值为空。
distributedNotificationEnabled 标识应用是否支持分布式通知。 布尔值 可缺省,缺省值为false。
minCompatibleVersionCode 可兼容的最低历史版本号,用于跨设备兼容性判断。 数值 可缺省,缺省值为versionCode的值。

示例:

{
  "app": {
    "bundleName": "com.example.myapplication",
    "vendor": "example",
    "versionCode": 1000000,
    "versionName": "1.0.0",
    "icon": "$media:app_icon",
    "label": "$string:app_name",
    "description": "$string:description",
    "minAPIVersion": 9,
    "targetAPIVersion": 9,
    "apiReleaseType": "Release",
    "distributedNotificationEnabled": true,
    "minCompatibleVersionCode": 1000000
  }
}

Module.json5配置文件

module.json5包含对应模块的配置信息,包含模块名、模块类型、模块描述、支持的设备类型、模块的编译构建信息、运行时权限信息等。

属性 含义 数据类型 是否可缺省
module 标识当前Module的属性。 对象
module.name 当前Module的名称,在应用内保证唯一性。 字符串
module.type 当前Module的类型,类型有三种:entry、feature和har。 字符串
module.description 当前Module的描述。 字符串 可缺省,缺省值为空。
module.mainElement 当前Module的入口。 字符串 对于entry类型Module,不可缺省;对于feature和har类型Module,可缺省。
module.deviceTypes 当前Module支持的设备类型。 字符串数组
module.deliveryWithInstall 当前Module是否在用户主动安装的时候安装,表示该Module对应的HAP是否跟随应用一起安装。 布尔值
module.installationFree 当前Module是否支持免安装特性。 布尔值
module.pages 对应Ability的页面信息,为配置文件中Page信息的资源索引。 字符串 对于entry类型Module,不可缺省;对于feature和har类型Module,可缺省。
module.abilities 当前Module中所有的Ability。 对象数组 可缺省,缺省值为空。
module.requestPermissions 当前Module运行时需向系统申请的权限集合。 对象数组 可缺省,缺省值为空。
module.definePermissions 当前Module自定义的权限信息。 对象数组 可缺省,缺省值为空。

示例:

{
  "module": {
    "name": "entry",
    "type": "entry",
    "description": "$string:module_desc",
    "mainElement": "EntryAbility",
    "deviceTypes": [
      "phone"
    ],
    "deliveryWithInstall": true,
    "installationFree": false,
    "pages": "$profile:main_pages",
    "abilities": [
      {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ts",
        "description": "$string:EntryAbility_desc",
        "icon": "$media:icon",
        "label": "$string:EntryAbility_label",
        "startWindowIcon": "$media:icon",
        "startWindowBackground": "$color:start_window_background",
        "exported": true,
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          }
        ]
      }
    ],
    "requestPermissions": [
      {
        "name": "ohos.permission.DISTRIBUTED_DATASYNC"
      }
    ],
    "definePermissions": [
      {
        "name": "ohos.myability.permission.PROVIDER",
        "grantMode": "system_grant",
        "availableScope": [
          "signature"
        ],
        "label": "$string:define_permissions_label",
        "description": "$string:define_permissions_description"
      }
    ]
  }
}

在DevEco Studio中,使用Cangjie Plugin 6.0.2解析JSON为对象,主要依赖ArkTS的序列化与反序列化能力。通过@Serializable装饰器标记类,然后使用JSON.parse()方法将JSON字符串转换为指定类型的对象。例如:let obj: MyClass = JSON.parse<MyClass>(jsonString);。确保类结构定义与JSON数据结构匹配。

在DevEco Studio-Cangjie Plugin 6.0.2中,JSON解析方式已更新。推荐使用[@ohos](/user/ohos).util模块下的JSON类进行解析,替代原有的serializationencoding.json

具体方法如下:

  1. 导入模块

    import JSON from '[@ohos](/user/ohos).util.JSON';
    
  2. 解析JSON字符串为对象

    let jsonString = '{"name": "John", "age": 30}';
    let jsonObj = JSON.parse(jsonString);
    console.log(jsonObj.name); // 输出: John
    
  3. 将对象转换为JSON字符串

    let obj = { name: "John", age: 30 };
    let jsonString = JSON.stringify(obj);
    console.log(jsonString); // 输出: {"name":"John","age":30}
    

该API符合HarmonyOS Next的标准化设计,使用方式与ECMAScript标准一致,无需额外学习成本。

回到顶部