HarmonyOS 鸿蒙Next:开启了严格的ARKTS代码检查后,通过JSON.parse解析JSON后如何获取JSON对象值,或有其他方法

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

HarmonyOS 鸿蒙Next:开启了严格的ARKTS代码检查后,通过JSON.parse解析JSON后如何获取JSON对象值,或有其他方法 开启了严格的ARKTS代码检查,通过JSON.parse解析JSON后,怎么获取JSON对象值,还是说有其他的方法

2 回复

在ArkTS中可以取JSON的值,示例代码如下:

class address {
  street: string;
  city: string;
  state: string;

  constructor(street: string, city: string, state: string) {
    this.street = street;
    this.city = city;
    this.state = state;
  }
}

class jsonObj {
  address: address
  name: string;
  age: number;
  phoneNumbers: Array<string>;

  constructor(name: string, age: number, address: address, phoneNumbers: Array<string>) {
    this.name = name;
    this.age = age;
    this.address = address;
    this.phoneNumbers = phoneNumbers;
  }
}

@Entry
@Component
struct Index {
  @State message: string = 'Hello World'

  build() {
    Row() {
      Column() {
        Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)
        Button() {
          Text("打印")
        }.width(150).height(75).onClick(() => {
          let str = ["555-1234", "555-5678"]
          let add = new address("123 Main St", "Anytown", "CA");
          let json = new jsonObj("john", 30, add, str)
          console.log(JSON.stringify(json.name));
          console.log(JSON.stringify(json.age));
          console.log(JSON.stringify(json.address));
          console.log(JSON.stringify(json.phoneNumbers));
        })
      }.width('100%')
    }.height('100%')
  }
}

系统规格问题:鸿蒙目前暂不支持,因为开启了严格的ARKTS语言检查,所以使用的data对象必须进行class类型的自定义,否则无法使用

解析字符串为对象,取字符串中的某些字段的值参考:

// 定义类型接口: 
interface userRespType {
  nickname: string,
  avatar: string
}

interface dataType {
  roomId: string,
  nativeUrl: string,
  status: string,
  userResp: Array<userRespType>
}

interface jsonObjectType {
  reqId: string,
  code: number,
  msg: string,
  data: dataType
}

let userResp: userRespType = {
  nickname: "一个很长的名字哈哈哈",
  avatar: "https://aopsmsg.pingan.com.cn/group4/M01/2A/3C/HhDEeFqcsfiAY06aAAA0Fw-3GV0645.jpg#w=210;h=210"
}
let data: dataType = {
  roomId: "823688",
  nativeUrl: "native://enterLiveRoom?RoomId=823688",
  status: "1",
  userResp: [userResp]
}
let jsonObj: jsonObjectType = {
  reqId: "2b2258ae54e3101a",
  code: 0,
  msg: "success",
  data: data
}
let json: string =
  JSON.stringify(jsonObj) // 假设test为JSON.prase解析后的数据 
let test:jsonObjectType = JSON.parse(json) 
console.info(test.msg) 
console.info(test.data.userResp[0].nickname)

更多关于HarmonyOS 鸿蒙Next:开启了严格的ARKTS代码检查后,通过JSON.parse解析JSON后如何获取JSON对象值,或有其他方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,当开启了严格的ARKTS代码检查后,使用JSON.parse解析JSON字符串后,可以通过以下几种方式获取JSON对象的值:

  1. 通过键名直接访问: 如果JSON对象的结构已知,可以直接通过键名来访问对应的值。例如:

    let jsonString = '{"name": "张三", "age": 30}';
    let jsonObject = JSON.parse(jsonString);
    let name = jsonObject.name; // 获取name的值
    let age = jsonObject['age']; // 同样可以获取age的值
    
  2. 使用Object.keysObject.entries遍历: 如果不知道JSON对象的具体结构,可以使用Object.keysObject.entries来遍历对象的键或键值对。

    let keys = Object.keys(jsonObject);
    keys.forEach(key => {
        console.log(key, jsonObject[key]);
    });
    
  3. 使用可选链(Optional Chaining): 对于可能不存在的嵌套属性,可以使用可选链来安全地访问。

    let nestedValue = jsonObject?.someKey?.nestedKey;
    

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部