HarmonyOS鸿蒙Next中动态读取JSON文件的代码,运行报错文件读取失败。
HarmonyOS鸿蒙Next中动态读取JSON文件的代码,运行报错文件读取失败。
import { BusinessError } from '@kit.BasicServicesKit';
import { fileIo as fs } from '@kit.CoreFileKit';
import { util } from '@kit.ArkTS';
// 定义多用户数据结构接口(数组类型)
// 定义用户数据结构
interface User {
NAME: string;
AGE: number;
}
interface UserData {
users: User[]; // 明确使用users数组存储多组数据
}
// async
export async function readAllUsers() {
console.log(`1...`);
try {
console.log(`2...`);
// 1. 读取JSON文件(使用__dirname确保路径正确)
// 沙箱文件路径示例:/data/storage/el2/base/files/data.json
//const filePath = getContext().filesDir + '/data.json';
// 同步读取 rawfile 文件内容(返回 Uint8Array 数据)
const rawFile = getContext().resourceManager.getRawFileContentSync("data.json");
console.log(`3...`);
// 将字节流转为字符串
const decoder = util.TextDecoder.create('utf-8');
const jsonStr = decoder.decodeToString(rawFile);
console.log(`4...`);
// 同步读取文件内容为字符串
const jsonStr1 = fs.readTextSync(jsonStr);
// 解析并处理数据
let jsonData : UserData = JSON.parse(jsonStr1);
let items: User[] = jsonData.users;
console.log(`5...`);
items.forEach((item: User) => {
console.log(`name: ${item.NAME}, Age: ${item.AGE}`);
console.log(`6...`);
});
}
catch (error) {
console.error('文件读取失败:', (error as BusinessError).message);
}
}
更多关于HarmonyOS鸿蒙Next中动态读取JSON文件的代码,运行报错文件读取失败。的实战教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
通过日志查看
// 解析并处理数据
let jsonData : UserData = JSON.parse(jsonStr1);
let items: User[] = jsonData.users;
console.log(5...);
这部分代码没有执行,导致json文件读取失败
发现在getRawFileContentSync获取了文件内容后,又通过fs.readTextSync读取了一遍文件,而且是读取的沙箱路径,把内容作为路径又读取了一次,导致后续代码走不下去,注释掉fs.readTextSync那行代码后就能成功读取json文件了。
更多关于HarmonyOS鸿蒙Next中动态读取JSON文件的代码,运行报错文件读取失败。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,动态读取JSON文件失败通常是由于文件路径或权限问题导致。请检查以下关键点:
- 文件路径:确保使用正确的资源管理器路径,如
$rawfile('filename.json')访问应用内的JSON文件。 - 权限配置:在
module.json5中确认已声明文件访问权限,例如ohos.permission.READ_USER_STORAGE。 - 文件位置:JSON文件需放置在项目的
resources/rawfile目录下。 - 异步处理:使用
resourceManager.getRawFileContent等API时,注意采用异步回调或Promise方式处理。
若路径和权限正确,可尝试使用fs模块的同步方法读取,如fs.readSync。


