如何从 React.js 读取和写入本地 JSON 文件?

Posted

技术标签:

【中文标题】如何从 React.js 读取和写入本地 JSON 文件?【英文标题】:How to read and write to local JSON files from React.js? 【发布时间】:2021-04-30 09:07:45 【问题描述】:

我已经为此查看了多个资源,但是似乎没有一个能够回答我的问题。我的 React 应用程序中有一个名为 items.json 的本地 JSON 文件。在该文件中,是我希望能够更新的对象列表。我尝试过使用fs,但这显然在 React 中不起作用,因为我收到了这个错误:

Unhandled Rejection (TypeError): fs.readFileSync is not a function

我想要做的是,当代码获得一个新项目时,它会查看 JSON 文件以查看其name 属性中是否存在具有匹配值的现有对象。如果有,它会将对象count 属性加1,否则它会创建一个新对象,并将其附加到JSON 文件中的列表中。这是我为此编写的代码。逻辑似乎是合理的(虽然它没有经过测试),但我不知道如何读取/写入数据。

let raw = fs.readFileSync("../database/items.json");
let itemList = JSON.parse(raw);
let found = false;
for (let item of itemList.averages) 
    if (item.name === this.state.data.item_name) 
        found = true;
        item.count += 1;
    

if (!found) 
    let newItem = 
        name: this.state.data.item_name,
        count: 1,
    
    itemList.averages.push(newItem);

let newRaw = JSON.stringify(itemList);
fs.writeFileSync("../database/items.json", newRaw);

JSON 文件:


    "averages": [
        
            "name": "Example",
            "count": 1,
        
    ]

【问题讨论】:

您在浏览器中。您不能在文件系统上写入文件,但可以提示用户下载它们。 Related 为什么不直接导入json文件? @Gh05d 我最初是这样做的,但据我所知(不远),imorted 文件是只读的。我可能错了 好的,另一个问题。为什么要将其保存在 JSON 文件中?为什么不使用 localStorage 或 sessionStorage 之类的东西? 我只是假设 JSON 会是最简单的,因为我知道它是如何工作的,但是如果 localStorage 和 sessionStorage 是一个更好的选择,我愿意学习它是如何工作的 【参考方案1】:

首先,浏览器本身无法访问文件系统,因此您将无法使用您的 react 应用程序来实现这一点。但是,如果您在后端使用 Node.js(或任何其他 FW)并创建一个 API 端点来帮助您写入文件系统,则可以实现这一点。

其次,如果您只想在前端做一些事情而不创建额外的 API 来将数据保存在 JSON 文件中,我认为这在您的情况下是不必要的。您可以使用 localstorage 保存数据并要求用户使用以下方式下载文本文件:

TextFile = () => 
    const element = document.createElement("a");
    const textFile = new Blob([[JSON.stringify('pass data from localStorage')], type: 'text/plain'); //pass data from localStorage API to blob
    element.href = URL.createObjectURL(textFile);
    element.download = "userFile.txt";
    document.body.appendChild(element); 
    element.click();
  

现在,要使用本地存储 API,您可以在这里查看 - https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

【讨论】:

如果答案有效,您可以接受并投票。谢谢! 工作得很好,谢谢!【参考方案2】:

从 json 导入和读取可以是这样的:

import data from ‘./data/data.json’;

然后使用.map() 来迭代数据。

对于本地编写,您可以使用一些库,例如 https://www.npmjs.com/package/write-json-file

【讨论】:

【参考方案3】:

使用 NodeJs 读取和写入 JSON 文件到本地存储非常简单,这意味着快速的一小块后端 API 将有助于完成这项工作。

几段代码可能对您有所帮助。假设您的 JSON 结构如下所示;


    "name":"arif",
    "surname":"shariati"

读取 JSON 文件;

// import * as fs from 'fs';
const fs = require('fs')
fs.readFile('./myFile.json', 'utf8', (err, jsonString) => 
    if (err) 
        return;
    
    try 
        const customer = JSON.parse(jsonString);
 catch(err) 
        console.log('Error parsing JSON string:', err);
    
)

customer 包含你的 JSON,值可以通过 customer.name 访问;

写入 JSON 文件

假设您的 JSON 对象有更新,如下所示;

const updatedJSON = 
    "name":"arif updated",
    "surname":"shariati updated"

现在您可以写入文件了。如果文件不存在,它将创建一个。如果已经存在,则会覆盖。

fs.writeFile('./myFile.json', JSON.stringify(updatedJSON), (err) => 
    if (err) console.log('Error writing file:', err);
)

【讨论】:

以上是关于如何从 React.js 读取和写入本地 JSON 文件?的主要内容,如果未能解决你的问题,请参考以下文章

Ionic 5:如何写入本地 JSON 文件?

无法在 React.js 中读取 json,出现意外的令牌错误

Python:如何从压缩的 json .gz 文件中读取并写入 json 文件

Json的本地写入和读取,也可以方便在开发中数据的调试

js能把数据写入到json文件中吗

从 Javascript 页面保存 JSON 数据