HarmonyOS 鸿蒙Next 读取不出本地JSON文件内容

发布于 1周前 作者 eggper 最后一次编辑是 5天前 来自 鸿蒙OS

json文件内容如下:

{
  "data": [
    {
      "name": "北京市",
      "city": [
        {
          "name": "北京市",
          "area": [
            "东城区",
            "西城区",
            "崇文区",
            "宣武区",
            "朝阳区",
            "丰台区",
            "石景山区",
            "海淀区",
            "门头沟区",
            "房山区",
            "通州区",
            "顺义区",
            "昌平区",
            "大兴区",
            "平谷区",
            "怀柔区",
            "密云县",
            "延庆县"
          ]
        }
      ]
    },
    {
      "name": "天津市",
      "city": [
        {
          "name": "天津市",
          "area": [
            "和平区",
            "河东区",
            "河西区",
            "南开区",
            "河北区",
            "红桥区",
            "塘沽区",
            "汉沽区",
            "大港区",
            "东丽区",
            "西青区",
            "津南区",
            "北辰区",
            "武清区",
            "宝坻区",
            "宁河县",
            "静海县",
            "蓟  县"
          ]
        }
      ]
    },
}
interface province_type{
    name:string
    city:Array<city_type>
}
interface city_type{
  name:string
  area:Array<string>
}


export class  provinceModel {
  data: Array<province_type> = [];




async getjsonfile(context: common.UIAbilityContext) {
  // 从资源管理器中获取名为 'province.json' 的文件内容
  let getjson = await context.resourceManager.getRawFileContent('province.json');
  console.log('getjson:'+getjson);
  // 创建 TextDecoderOptions 对象,设置 ignoreBOM 为 true
  let textDecoderOptions: util.TextDecoderOptions = { ignoreBOM: true };
  // 创建 TextDecoder 实例,指定编码为 'utf-8' 并传入 TextDecoderOptions
  let textDecoder = util.TextDecoder.create('utf-8', textDecoderOptions);
  // 使用 TextDecoder 的 decodeWithStream 方法解码 JSON 数据,设置 stream 为 false 以一次性解码整个数据
  let result = textDecoder.decodeToString(getjson, { stream: false });
  //下面decodeWithStream在API 12 下不能使用
  //let result = textDecoder.decodeWithStream(getjson, { stream: false });
  // 将解码后的字符串解析为 JSON 对象
  console.log('1234result:'+result)
  let Bookmodel: provinceModel = JSON.parse(result);
  // 将解析得到的 BookModel 对象中的 data 属性赋值给类的 Booklist 属性
  this.provinceList =Bookmodel.data;
}

getjson获取到的数据如下

image.png

但是往下

image.png

获取不到数据了?

请问是什么原因?


更多关于HarmonyOS 鸿蒙Next 读取不出本地JSON文件内容的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

getRawFileContent 返回的是Promise<Uint8Array>, decodeToString这里需要的是Unit8Array,两边对不上,需要改一下。你可以改成

深色代码主题
复制
context.resourceManager.getRawFileContent('province.json').then((getjson) => {
  //todo
});
或者
let getjson = context.resourceManager.getRawFileContentSync('province.json'),

控制台有日志打印字数限制,可以debug看下数据,或者循环打印,改了以后就可以看到打印日志了

更多关于HarmonyOS 鸿蒙Next 读取不出本地JSON文件内容的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中读取本地JSON文件内容,你可以采用以下步骤:

  1. 文件路径确认:确保你的JSON文件路径正确,且应用具有访问该路径的权限。文件应放置在应用的私有存储目录中,如filescache目录。

  2. 使用文件流读取:通过FileInputStreamFileReader类来打开并读取文件内容。示例代码如下:

// 示例代码(注意:鸿蒙开发中不直接使用Java API,此为示意)
// 假设文件路径为 "/data/user/0/你的包名/files/example.json"
FileInputStream fis = openFileInput("example.json");
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
    sb.append(line);
}
br.close();
isr.close();
fis.close();
String jsonContent = sb.toString();

在鸿蒙系统中,应使用相应的文件读取API(如FileIoManager等)来替代Java的FileInputStream等类,但核心逻辑相似。

  1. JSON解析:使用鸿蒙提供的JSON解析库(如ohos.json包)来解析读取到的JSON字符串。

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

回到顶部