Node.Js 向文件写入和读取数组

Posted

技术标签:

【中文标题】Node.Js 向文件写入和读取数组【英文标题】:Node.Js write and read Array to/from File 【发布时间】:2020-10-15 19:54:15 【问题描述】:

我有一个 NodeJs 小程序,我想将用户数组(包含对象)保存到文件中,我正在这样做:

const fs = require('fs');
const util = require('util');
fs.writeFileSync('data/inventur_users.json', util.inspect(users), 'utf-8');

文件 inventur_Users.json 中的输出是:

[ BU4AFLx3cUYqdjvYPci7:  id: '5LkOWtVFcqz29UpsAAAC',
    name: 'p.langkau@scharr.de',
    rechte: 'vollzugriff',
    client_ID: 'BU4AFLx3cUYqdjvYPci7'  ]

现在我正在使用此代码重新读取文件:

filedata = fs.readFileSync('data/inventur_users.json', 'utf-8');

我的问题是我只得到一个字符串,我不知道如何将字符串转换回包含对象的数组。

提前致谢,帕特里克

【问题讨论】:

【参考方案1】:

首先

[ BU4AFLx3cUYqdjvYPci7:  id: '5LkOWtVFcqz29UpsAAAC',
    name: 'p.langkau@scharr.de',
    rechte: 'vollzugriff',
    client_ID: 'BU4AFLx3cUYqdjvYPci7'  ]

不是一个有效的 json,你可以从这里验证它https://jsonlint.com/

有效的 json 看起来像

[
    "BU4AFLx3cUYqdjvYPci7": 
        "id": "5LkOWtVFcqz29UpsAAAC",
        "name": "p.langkau@scharr.de",
        "rechte": "vollzugriff",
        "client_ID": "BU4AFLx3cUYqdjvYPci7"
    
]

然后你可以直接在变量中请求.json文件的内容

const filedata = require('data/inventur_users.json');

【讨论】:

感谢您的回复,如何将数组转换为json?如果我导入 json,我可以像使用数组一样使用它吗?帕特里克 [1, 2, 3] 是一个有效的 json,因此您可以将其直接存储在 json 文件中,并且在需要时,是的,您可以像数组一样直接使用它。您可以使用jsonlint.com 来验证什么是有效的json,什么不是 所以我能够将数组导出到一个有效的 Json,但是如果我想用 require 导入它,我会收到这个错误:'错误:找不到模块'data/inventur_users.json'但是json 在那个目录中 试试 require('./data/inventur_users.json'); 现在我可以读取 json,但它给了我一个 json 字符串,开头和结尾没有“”【参考方案2】:

您可以使用JSON.parse() 将字符串转换回javascript 对象:

filedata = JSON.parse(fs.readFileSync('data/inventur_users.json', 'utf-8'));

您还应该首先使用JSON.stringify() 来保存文件:

fs.writeFileSync('data/inventur_users.json', JSON.stringify(util.inspect(users)), 'utf-8');

【讨论】:

我按照你的例子做了,但 filedata 仍然是一个字符串。 你也用JSON.stringify(...)保存文件了吗? 这里可以看到代码、json和输出:pastebin.com/nZqZNdpy

以上是关于Node.Js 向文件写入和读取数组的主要内容,如果未能解决你的问题,请参考以下文章

Node.js同时读取和写入流到同一个文件

Node.js的Buffer写入

Node.js——fs模块(文件系统),创建删除目录(文件),读取写入文件流

node.js同步及异步读取写入删除文件1

Node 读取 + 写入 + 路径问题

如何使用 Node.js 读取/写入图像?