HarmonyOS 鸿蒙Next中HTTP请求返回数据类型为JSON文件时如何读取data

HarmonyOS 鸿蒙Next中HTTP请求返回数据类型为JSON文件时如何读取data

【问题现象】

当HTTP请求返回的数据类型为JSON文件时,希望接收并读取JSON文件中的数据。通过GET请求,可以直接调用并有数据返回,但是data读取失败。

例如通过GET请求,访问如下接口:https://xxx.cn/html/app/updateVersion.json

【背景知识】

HTTP请求返回文件可通过requestInStream获取文本。

【定位思路】

HTTP请求返回数据读取失败常见原因如下:

  • 请求失败;
  • 请求成功,但无数据返回;
  • 读取数据的方式错误。

由问题现象已知网络请求成功且有数据返回,因此排除前两种原因,可能的原因为读取数据的方法错误。

【解决方案】

先使用requestInStream获取文本,再通过on(‘dataReceive’,()=>{})流式获取数据,on(‘dataEnd’,()=>{})整合文本内容转化JSON数据。

async httpTest1(): Promise<object>{
  return new Promise((resolve: Function, reject: Function) => {
    let res = new ArrayBuffer(0);
    let httpRequest = http.createHttp();
    httpRequest.on('dataReceive',(data:ArrayBuffer)=>{
      const newRes = new ArrayBuffer(res.byteLength + data.byteLength);
      const resView = new Uint8Array(newRes);
      resView.set(new Uint8Array(res));
      resView.set(new Uint8Array(data), res.byteLength);
      res = newRes;
      console.info('res length: ' + res.byteLength);
    })
    httpRequest.on('dataEnd',()=>{
      try{
        let textDecoderOptions: util.TextDecoderOptions = {
          ignoreBOM : true
        }
        let decoder = util.TextDecoder.create('utf-8',textDecoderOptions);
        let str = decoder.decodeWithStream(new Uint8Array(res.slice(3)));
        let json_str = JSON.parse(str)
        resolve(json_str)
      }catch (err){
        hilog.error(0x0000, 'testTag','error:' + err);
      }
    })
    httpRequest.requestInStream('https://xxx.cn/html/app/updateVersion-tibetN.json', // 后台服务器地址
      {
        method: http.RequestMethod.GET,
        header: {
          'Content-Type': 'application/json'
        },
        connectTimeout: 6000,
        readTimeout: 6000,
      }, (err, data) => {
        if (!err) {
        }
      }
    );
  })
}

【总结】

  1. 读取本地JSON文件的方式:
aboutToAppear(): void {
  let value = getContext(this).resourceManager.getRawFileContentSync('data.json');
  JSON.parse(Buffer.from(value.buffer).toString());
}
  1. 读取HTTP请求返回的JSON文件的方式:

使用requestInStream获取文本,通过on(‘dataReceive’,()=>{})流式获取数据,on(‘dataEnd’,()=>{})整合文本内容转化JSON数据。


更多关于HarmonyOS 鸿蒙Next中HTTP请求返回数据类型为JSON文件时如何读取data的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next中HTTP请求返回数据类型为JSON文件时如何读取data的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中处理JSON数据

在HarmonyOS鸿蒙Next中,当HTTP请求返回的数据类型为JSON文件时,可以通过@ohos.net.http模块进行请求,并使用@ohos.util模块中的JSON类来解析返回的JSON数据。以下是一个简单的示例代码:

import http from '@ohos.net.http';
import { JSON } from '@ohos.util';

// 创建HTTP请求对象
let httpRequest = http.createHttp();

// 定义请求的URL
let url = 'https://example.com/api/data';

// 发起GET请求
httpRequest.request(url, {
  method: http.RequestMethod.GET,
  expectDataType: http.HttpDataType.STRING,
}, (err, data) => {
  if (err) {
    console.error('Request failed:', err);
    return;
  }

  // 解析返回的JSON数据
  let jsonData = JSON.parse(data.result as string);

  // 读取data字段
  let responseData = jsonData.data;

  console.log('Response data:', responseData);
});

在这个示例中,首先通过http.createHttp()创建了一个HTTP请求对象,然后使用httpRequest.request()方法发起GET请求。请求成功后,通过JSON.parse()方法将返回的字符串数据解析为JSON对象,最后通过jsonData.data读取data字段的内容。

回到顶部