HarmonyOS 鸿蒙Next ArkTS如何读取本地json
HarmonyOS 鸿蒙Next ArkTS如何读取本地json
let json = require(’/Users/Documents/workspace/test.json’); console.log(json, ‘the json obj’);
上面的方式?
楼主您好,关于文件读取的示例可以参考以下Demo链接:https://gitee.com/openharmony/applications_app_samples/tree/master/FileManager/FileIo
更多关于HarmonyOS 鸿蒙Next ArkTS如何读取本地json的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
请问使用 fileIo.openSync
读取本地 resources/rawfile
目录下的 JSON 文件或者其他目录下怎么写呢?
let readFd = fileIo.openSync(’…/pages/province.json’, 0o0) 这样试了也不行,
楼主您好,文件读取只支持沙箱路径,您可以参考一下以下链接: https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/reference/apis/js-apis-fileio.md/
还没弄完
import util from '@ohos.util'
import fileio from '@ohos.fileio'
import { CountryModel } from '../model/CountryModel'
import ArrayList from '@ohos.util.ArrayList'
@Entry
@Component
struct PanelExample {
@State show: boolean = false
private select: number = 1
provinceArrayA: string[] = ['北京市', '天津市', '河北省', '山西省', '陕西省']
cityArrayB: string[] = ['北京市', '天津市', '河北省', '山西省', '陕西省']
areaArrayC: string[] = ['北京市', '天津市', '河北省', '山西省', '陕西省']
options1Items: ArrayList<CountryModel> = new ArrayList
options2Items: ArrayList<ArrayList<String>> = new ArrayList
options3Items: ArrayList<ArrayList<ArrayList<String>>> = new ArrayList
@PageLifecycle(PageStage.Show)
onPageShow() {
this.read_fileIo()
}
///
/**
* 读取路径
* data/storage/el1/bundle/entry/resources/rawfile/province.json
* 下的json文件内的省市区内容
*/
private stream: fileio.Stream
async read_fileIo() {
let stat = fileio.statSync(globalThis.localFilePath);
console.log('文件具体信息:' + stat.size)
let readFd = fileio.openSync(globalThis.localFilePath, 0o0); //0o0代表只读打开文件
this.stream = fileio.fdopenStreamSync(readFd, "r")
let buf = new ArrayBuffer(stat.size) //文件大小
let readOut = await this.stream.read(buf)
let textDecoder = new util.TextDecoder("utf-8", { ignoreBOM: true }); //解决中文乱码问题
let buffer = new Uint8Array(readOut.buffer)
let readString = textDecoder.decode(buffer, { stream: false });
console.log('文件内容:' + JSON.stringify(readString))
var jsonBean: ArrayList<CountryModel> = JSON.parse(readString);
this.options1Items = jsonBean;
for (var index = 0; index < jsonBean.length; index++) {
var cityList: ArrayList<String> = new ArrayList;
var province_AreaList: ArrayList<ArrayList<String>> = new ArrayList;
var cityArray = jsonBean[index].city;
for (var c = 0; c < cityArray.length; c++) { //遍历该省份的所有城市
var cityName = cityArray[c].name;
cityList.add(cityName);
var city_AreaList: ArrayList<String> = new ArrayList;
var area = cityArray[c].area;
for (var d = 0; d < area.length; d++) { //遍历
city_AreaList.add(area[d]);
}
province_AreaList.add(city_AreaList);
}
/**
* 添加城市数据
*/
this.options2Items.add(cityList);
/**
* 添加地区数据
*/
this.options3Items.add(province_AreaList);
}
this.options1Items.forEach((value, index) => {
console.log("遍历数组一级A:" + value.name, index);
console.log("遍历数组一级B:" + JSON.stringify(value.city), index);
this.provinceArrayA.push(value.name);
})
this.options3Items.forEach((value, index) => {
console.log("遍历数组三级级A:" + JSON.stringify(value), index);
})
this.stream.close()
fileio.close(readFd)
}
build() {
Column() {
Text('2021-09-30 Today Calendar: 1.afternoon......Click for details')
.width('90%')
.height(50)
.borderRadius(10)
.backgroundColor(0xFFFFFF)
.padding({ left: 20 })
.onClick(() => {
this.show = !this.show
})
Panel(this.show) { // 展示日程
Column() {
Row() {
TextPicker({ range: this.provinceArrayA, selected: this.select })
.layoutWeight(1)
.onChange((value: string, index: number) => {
console.info('Picker item changed, value: ' + value + ', index: ' + index)
for (var i = 0;i < this.options2Items.length; i++) {
if (index == i) {
var a: ArrayList<string> = this.options2Items[i];
for (var index = 0; index < a.length; index++) {
const element = a[index];
this.cityArrayB.push(element)
}
}
}
})
TextPicker({ range: this.cityArrayB, selected: this.select })
.layoutWeight(1)
.onChange((value: string, index: number) => {
console.info('Picker item changed, value: ' + value + ', index: ' + index)
})
TextPicker({ range: this.areaArrayC, selected: this.select })
.layoutWeight(1)
.onChange((value: string, index: number) => {
console.info('Picker item changed, value: ' + value + ', index: ' + index)
})
}
}
}
.type(PanelType.Foldable)
.mode(PanelMode.Half)
.dragBar(true) // 默认开启
.halfHeight(500) // 默认一半
.onChange((width: number, height: number, mode: PanelMode) => {
console.info(`width:${width},height:${height},mode:${mode}`)
})
}.width('100%').height('100%').backgroundColor(0xDCDCDC).padding({ top: 5 })
}
}
有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html
您可以这样做,但需要修改tsconfig.json
。在tsconfig.json
中有一个名为resolveJsonModule
的设置。默认情况下,其值设置为false
。
TL;DR
-
打开
tsconfig.json
,如果resolveJsonModule
在compilerOptions
中不存在,则按如下方式添加它:"resolveJsonModule": true,
-
打开要读取文件并导入的组件,如下所示:
import * as photos from '../../path-to file';
以上更改足以导入文件。
下面是一个示例:Stackblitz示例
上面的是网上的例子 ,但是我这个是api9的 该如何弄
apiType: ‘stageMode’,
我把json文件放在了resources/rawfile下
请问必须用json来存数据吗?可不可以直接用js对象来存?反正放在资源目录里面也没法修改。
北京市
- 东城区
- 西城区
- 崇文区
- 宣武区
- 朝阳区
- 丰台区
- 石景山区
- 海淀区
- 门头沟区
- 房山区
- 通州区
- 顺义区
- 昌平区
- 大兴区
- 平谷区
- 怀柔区
- 密云县
- 延庆县
天津市
- 和平区
- 河东区
- 河西区
- 南开区
- 河北区
- 红桥区
- 塘沽区
- 汉沽区
- 大港区
- 东丽区
- 西青区
- 津南区
- 北辰区
- 武清区
- 宝坻区
- 宁河县
- 静海县
- 蓟 县
如果直接用js对象,就不需要读取了。
在HarmonyOS鸿蒙系统中,使用ArkTS(Ark TypeScript)读取本地JSON文件可以通过文件系统API来实现。以下是基本的步骤:
-
获取文件路径:首先,确保你知道JSON文件的存储路径。如果是应用内的资源文件,路径通常是相对于应用的资源目录。
-
文件读取:使用
file
模块或相应的文件系统API来读取文件。ArkTS提供了封装好的文件操作接口,可以方便地读取文件内容。 -
JSON解析:读取到文件内容后,使用JSON解析函数将字符串转换为JSON对象。ArkTS支持JSON解析,可以直接使用相关API。
示例代码(伪代码形式,具体API需参考ArkTS官方文档):
import file from '[@ohos](/user/ohos).file';
async function readLocalJson(filePath: string): Promise<any> {
try {
let data = await file.readFile(filePath, { encoding: 'utf8' });
return JSON.parse(data);
} catch (error) {
console.error('Error reading JSON file:', error);
throw error;
}
}
// 使用示例
readLocalJson('/path/to/your/file.json').then(jsonObj => {
console.log(jsonObj);
}).catch(err => {
console.error('Failed to read JSON:', err);
});
``
请注意,上述代码为示例性质,具体实现需根据ArkTS的实际API进行调整。如果问题依旧没法解决请联系官网客服,官网地址是 [https://www.itying.com/category-93-b0.html](https://www.itying.com/category-93-b0.html)