如何使用Expo Filesystem保存导入的JSON文件

问题描述

我一直在与Expo合作开发React Native项目,该项目使用json文件存储本地数据。我像这样导入数据 df = df[df.columns.get_level_values(level=0).isin(mask.index[mask])]

我正在使用import data from '../database.json'对导入的JSON进行更改(添加删除)。当我关闭应用程序时,这些更改不是持久的,因为我无法弄清楚如何保存它们。我已经看过像这样使用expo-file-system库:

data.push(new_data)

这是通过查看api文档中的示例得出的。但是,这总是会抛出承诺拒绝,并且最终不会写入文件。你能指出我正确的方向吗?

此外,我是否应该以其他方式导入database.json,这样我就已经可以将其保存到uri中了。

解决方法

改为使用AsyncStorage。 react本机软件包已被弃用但可以使用,或者使用@ react-native-community / async-storage并将json转换为字符串(AsyncStorage仅可以存储字符串)

设置项目

import AsyncStorage from '@react-native-community/async-storage';
...
await AsyncStorage.setItem('myData',JSON.stringify(data))

获取项目

const data = await AsyncStorage.getItem('myData')
,

如果使用AsyncStorage,则仅存储少量数据。也许6mb或10 mb。

您可以使用expo fileSystem

import * as FileSystem from 'expo-file-system';
...
FileSystem.writeAsStringAsync(FileSystem.documentDirectory + 'database.json',data);

转换您的数据(将json类型转换为字符串),例如:

  writeData = async () => {
          var persons = ''
          await axios.get(`http://192.168.0.48:4000/api/sql/student`)
          .then(res => {
            persons = res.data
          })
          await FileSystem.writeAsStringAsync(FileSystem.documentDirectory + `offline_queue_stored.json`,JSON.stringify(persons));
        }