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) {
}
}
);
})
}
【总结】
- 读取本地JSON文件的方式:
aboutToAppear(): void {
let value = getContext(this).resourceManager.getRawFileContentSync('data.json');
JSON.parse(Buffer.from(value.buffer).toString());
}
- 读取HTTP请求返回的JSON文件的方式:
使用requestInStream获取文本,通过on(‘dataReceive’,()=>{})流式获取数据,on(‘dataEnd’,()=>{})整合文本内容转化JSON数据。
更多关于HarmonyOS 鸿蒙Next中HTTP请求返回数据类型为JSON文件时如何读取data的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于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
字段的内容。