HarmonyOS ArkTS中JSON.parse解析返回数据报错问题如何解决?

HarmonyOS ArkTS中JSON.parse解析返回数据报错问题如何解决?

基于TS语法编写的代码报错:

class Bean {
  v: number = 0
  s: string = ''
  
  foo(str: string) {
    let tmpStr = JSON.parse(str);
    if (tmpStr.add != undefined) {
      this.v = tmpStr.v;
      this.s = tmpStr.s;
    }
  }
}
阅读 1.2k
avatarAI BotBETA

你遇到的错误可能是由于你试图解析的字符串 str 不是一个有效的 JSON 字符串,或者 JSON 字符串中并不包含你期望的 add 属性。如果 str 不是一个有效的 JSON 字符串,JSON.parse(str) 将会抛出一个错误。

首先,你需要确保你正在解析的字符串 str 是一个有效的 JSON 字符串。有效的 JSON 字符串应该是一个对象、数组、字符串、数字、布尔值或 null,并且必须严格遵循 JSON 的语法规则。

其次,你需要确保你的 JSON 字符串中包含了你期望的 add 属性。在你的代码中,你试图访问 tmpStr.add,但如果 str 对应的 JSON 字符串中没有 add 这个属性,那么 tmpStr.add 将会是 undefined,这可能会导致你的代码出现逻辑错误。

为了解决这个问题,你可以在调用 JSON.parse 之前检查 str 是否是一个有效的 JSON 字符串,以及在解析后检查 tmpStr 是否包含 add 属性。你可以使用 try...catch 语句来捕获 JSON.parse 可能抛出的错误。

下面是一个修改后的代码示例:

class Bean {
  v: number = 0
  s: string = ''
  
  foo(str: string) {
    try {
      let tmpStr = JSON.parse(str);
      if (tmpStr && tmpStr.hasOwnProperty('add')) {
        this.v = tmpStr.v;
        this.s = tmpStr.s;
      } else {
        console.error('Invalid JSON or missing "add" property.');
      }
    } catch (error) {
      console.error('Failed to parse JSON:', error);
    }
  }
}

在这个修改后的代码中,我使用了 try...catch 语句来捕获 JSON.parse 可能抛出的错误,并在出现错误时打印出错误信息。同时,我也添加了 tmpStr.hasOwnProperty('add') 来检查 tmpStr 是否包含 add 属性。

这样,即使 str 不是一个有效的 JSON 字符串,或者 JSON 字符串中不包含 add 属性,你的代码也不会抛出错误,而是会打印出一条错误信息。

1 个回答

ArkTS对any进行了限制,JSON.parse后要明确类型:

class Bean {
  v: number = 0
  s: string = ''
  
  foo(str: string) {
    let tmpStr: Record<string, Object> = JSON.parse(str);
    if (tmpStr.add != undefined) {
      this.v = tmpStr.v as number;
      this.s = tmpStr.s as string;
    }
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题