У меня было требование чтения и обновления файла json в соответствии с пользовательским взаимодействием с приложением. Но не нашел много информации о записи файла json, используя @ ionic-native / file . После небольших исследований и разработок я смог выполнить свое требование. Поэтому здесь я публикую сообщение о том, как читать / писать / добавлять файл json с помощью @ ionic-native / file, для других разработчиков иона, у которых также может быть такое же требование.
Parser.ts
export class Parser {
static instance: Parser
jsonData: {} = {}
nativeURL: string
fileName = 'data.json'
private constructor(private file: File) {
}
doFileInteractions() {
let that = this
let writeDataCompletionHandler = function (success, data) {
if (success) {
console.log('Final jsonData')
console.log(that.jsonData)
}
else {
}
}
let readDataCompletionHandler = function (success, data) {
if (success) {
that.jsonData = JSON.parse(data)
console.log('JSON data...')
console.log(that.jsonData)
that.writeJsonData(writeDataCompletionHandler)
}
else {
}
}
this.readJsonData(readDataCompletionHandler)
}
readJsonData(completionHandler) {
let dirName = 'www/assets/data'
console.log('this.file.applicationDirectory>>')
console.log(this.file.applicationDirectory)
this.file.listDir(this.file.applicationDirectory, dirName)
.then((list) => {
console.log('Success: listDir')
console.log(list)
list.forEach(element => {
if (element.name == this.fileName) {
// READ FILE
this.nativeURL = element.nativeURL.replace('/' + this.fileName, '')
this.file.readAsText(this.nativeURL, this.fileName)
.then((result) => {
console.log('Success: readAsText')
console.log(result)
completionHandler(true, result)
})
.catch((error) => {
console.log('Failure: readAsText')
console.log(error)
completionHandler(false, error)
})
console.log('nativeURL: ')
console.log(this.nativeURL)
}
});
})
.catch((error) => {
console.log('Failure: listDir')
console.log(error)
})
}
writeJsonData(completionHandler) {
// WRITE FILE
this.jsonData['data']['newData'] = 'X1234'
let stringyfiedJson = JSON.stringify(this.jsonData)
this.file.writeFile(this.nativeURL, this.fileName, stringyfiedJson, { append: false, replace: true })
.then((result) => {
console.log('Success: Writefile')
console.log(result)
completionHandler(true, result)
})
.catch((error) => {
console.log('Failure: WriteFile')
console.log(error)
completionHandler(false, error)
})
}
static setInstance(file: File) {
if (!this.instance) {
this.instance = new Util_Parser(file)
}
}
Для записи : {append: false, replace: true}
Для добавления : {append: true, replace: false}
app.component.ts
export class MyApp {
@ViewChild(Nav) nav: Nav;
rootPage: any = HomePage;
pages: Array<{ title: string, component: any, enable: boolean }>;
constructor(
public platform: Platform,
public statusBar: StatusBar,
public splashScreen: SplashScreen,
public events: Events,
public file: File) {
this.initializeApp();
this.pages = [
{ title: 'Home', component: HomePage, enable: true },
{ title: 'Input', component: UserInputPage, enable: true }
];
// initialize parser
Parser.setInstance(this.file)
}
}
HomePage.ts
export class HomePage {
constructor(public navCtrl: NavController,
public navParams: NavParams,
public popoverCtrl: PopoverController,
public formbuilder: FormBuilder, public file: File) {
Parser.instance.doFileInteractions()
}
}
ионная информация
cli пакеты: (/ usr / local / lib / node_modules)
@ionic/cli-utils : 1.19.2
ionic (Ionic CLI) : 3.20.0
глобальные пакеты:
cordova (Cordova CLI) : 8.0.0
местные пакеты:
@ionic/app-scripts : 3.1.9
Cordova Platforms : ios 4.5.4
Ionic Framework : ionic-angular 3.9.2
Система:
ios-deploy : 1.9.2
Node : v8.11.1
npm : 6.1.0
OS : macOS High Sierra
Xcode : Xcode 9.1 Build version 9B55