HarmonyOS 鸿蒙Next中json转换失败

发布于 1周前 作者 songsunli 来自 鸿蒙OS

HarmonyOS 鸿蒙Next中json转换失败

let json = “{‘REQUESTS’: [{‘REQ_COMM_DATA’: { ‘service’: ‘111’, ‘REQ_MSG_HDR’: { ‘LANGUAGE’: ‘zh_CN’, ‘OP_CODE’: ‘1’ }}}]}”; JSON.parse(json) Error message: Unexpected Object Prop in JSON
会报异常,该怎么解决呢?有没有类似Android JSONObject的类或者方法呢?

4 回复

安装方法:

ohpm install class-transformer
ohpm install reflect-metadata

参考代码:

import 'reflect-metadata';

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

class ResponseObj {

  @Type(() => Person)
  data: Person[] = [];

}

@Entry
@Component
struct Index {

  @State list: Person[] = [];
  @State message: string = 'Click me';

  aboutToAppear(): void {
    let str = '{"data" : [{"number" :1, "testA": { "str" : "123"}},{"number" :2,"age": 21,"testA": {"str" : "456"}},{"number" :3,"age": 22,"testA": {"str" : "789"}}]}'
    let jsonData: ESObject = JSON.parse(str)
    let responseObj: ResponseObj = plainToClass(ResponseObj, jsonData);

    console.log(`test====${responseObj.data[0] instanceof Person}`)

    this.list = this.list.concat(responseObj.data);
  }

  build() {
    Row() {
      Column() {
        ForEach(this.list, (item: Person, index: number) {
          ViewA({ index: index, age:item.hasAge(), test item.testA })
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

@Observed
export class TestA {

  public str : string

  constructor(str: string) {
    this.str = str;
  }
}

export class Person {

  name: string = ''
  age: number = 1

  @Type(()=>TestA)
  TestA = new TestA('')

  hasAge():number
  {
    return this.age
  }
}

@Component
export struct ViewA {

  @ObjectLink testA

  index: number = -1;
  age:number = 0

  build() {
    Row(){
      Button(`View A ${this.testA.str}`).onClick(() =>{
        this.index += 1;
        this.testA.str = `${this.index} : Test A String ${this.age}`
      })
    }
    .margin({top : 10 })
  }
}

更多关于HarmonyOS 鸿蒙Next中json转换失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


这不是一个json字符串吧,在其他json格式化工具中不能格式化

在HarmonyOS鸿蒙Next中,若遇到JSON转换失败的问题,可能的原因包括:

  1. 数据格式错误:JSON格式不标准,如缺少引号、逗号,或使用了单引号而非双引号。
  2. 数据类型不匹配:JSON数据中的数据类型与鸿蒙系统预期的不一致,如将字符串误用为数字。
  3. 编码问题:JSON数据使用了非UTF-8编码,导致解析失败。
  4. 库或API限制:使用的JSON解析库或API可能存在功能限制或缺陷,无法处理特定格式或深度的JSON数据。
  5. 系统资源不足:系统内存或CPU资源不足,导致JSON解析过程中断或失败。
  6. 网络问题:若JSON数据来自网络请求,网络不稳定或请求超时可能导致数据不完整或损坏,进而解析失败。
  7. 权限问题:应用可能缺乏访问某些数据或执行特定操作的权限,影响JSON数据的获取或解析。

解决这些问题需要根据具体情况逐一排查和修正,确保JSON数据的正确性和完整性。

在HarmonyOS(鸿蒙Next)中,JSON转换失败可能由以下原因导致:

  1. JSON格式错误:检查JSON字符串是否符合标准格式,确保没有多余或缺失的引号、括号等。

  2. 数据类型不匹配:确保JSON中的数据类型与目标对象的结构匹配,如字符串、数字、数组等。

  3. 解析库问题:确认使用的JSON解析库(如JsonUtil)是否正确配置,或尝试更新到最新版本。

  4. 编码问题:确保JSON字符串的编码格式(如UTF-8)与系统一致。

  5. 异常处理:在解析时添加异常捕获,查看具体错误信息以定位问题。

建议使用调试工具逐步排查,确保JSON字符串和目标对象结构一致。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!