HarmonyOS 鸿蒙Next 获得带有特殊符号的参数名,使用中括号和record<string,类型>存不起来数据,直接点出来也不行

发布于 1周前 作者 htzhanglong 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 获得带有特殊符号的参数名,使用中括号和record<string,类型>存不起来数据,直接点出来也不行

获得带有特殊符号的参数名,使用中括号和record<string,类型>,和直接点出来都不行,存不起来数据

2 回复

可能是json转对象的问题,

引入三方库:

ohpm install class-transformer

ohpm install reflect-metadata

json转对象demo:

import { Type, plainToClass } from 'class-transformer'

import "reflect-metadata"

export class CardTable {

 'soapen:Envelope': Body3

 '[@xmlns](/user/xmlns):soapenv': string

}

export class Body3 {

 'soapenv:Body': Three3

}

export class Three3 {

 'CM-MOB-IF06': Four3

}

export class Four3 {

 output?: data3

 input?: Five3

}

export class data3 {

 chargeHis?: Alldata4[]

}

export class Alldata4 {

 PayAmt?: string

 PaySq?: string

 PayDate?: string

}

export class Five3 {

 UniUserCode?: string

}

function a() {

 let jsonStr='{ "global": {"soapen:Envelope": {"soapenv:Body":{"CM-MOB-IF06":{"output":{"chargeHis":[{"PayAmt":"payamt01","PaySq":"PaySq01","PayDate":"PayDate01"}]},"input":{"UniUserCode":"uniUserCode01"}}}}}}'

 let mapInfo01: Record<string, Object> = JSON.parse(jsonStr) as Record<string, Object>

 let cardInfo02 = plainToClass(CardTable, mapInfo01.global);

 console.info("mapInfo01 =" + mapInfo01)

 console.info("cardInfo02 =" + cardInfo02)

}

[@Entry](/user/Entry)

[@Component](/user/Component)

struct Index {

 [@State](/user/State) message: string = 'Hello World';

 build() {

   Column() {

     Text(this.message)

       .id('Index240715112917104_01HelloWorld')

       .fontSize(50)

       .fontWeight(FontWeight.Bold)

       .onClick(() => {

         a()

       })

   }

   .height('100%')

   .width('100%')

 }

}

在HarmonyOS鸿蒙Next的开发环境中,遇到使用中括号和record<string, 类型>存储带有特殊符号的参数名时数据无法存储的问题,通常是由于JSON序列化或反序列化过程中特殊字符的处理不当所致。特殊符号(如中括号[]、花括号{}等)在JSON中被视为对象或数组的标识符,因此直接用作键名(key)会导致解析错误。

解决方案包括:

  1. 转义特殊字符:在将参数名作为键存储之前,对特殊字符进行转义处理,如将中括号[]转换为对应的Unicode编码或使用\进行转义。

  2. 使用映射表:不直接使用带有特殊符号的参数名作为键,而是使用一个映射表,将特殊字符的参数名映射到一个无特殊字符的字符串上,以此作为键进行存储。

  3. 自定义序列化规则:如果使用的框架支持自定义序列化规则,可以定义一套规则来正确处理带有特殊符号的参数名。

请检查并尝试上述方法,确保在数据序列化和反序列化过程中正确处理特殊字符。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部