node.js - 如何使用nodejs附加到json文件中
问题描述
我一直在尝试追加到 json 文件中,但无法达到预期的结果。
我的 json 文件:
{
"Karan": {
"name": "karan",
"descriptor": [
343,
43,
43
]
},
"Mark": {
"name": "Mark",
"descriptor": [
343,
43,
43
]
}
}
附加到文件的代码:
const fs = require('fs');
const JsonData = require('./JsonFile.json')
let user = {
Jack:
{
name: "Jack",
descriptor:[28,8,43]
}};
fs.appendFile("JsonFile.json",","+JSON.stringify(user,null,2),err => {
if(err) throw err;
console.log("Done Writing");
});
console.log(JsonData);
我得到的输出:
{
"Karan": {
"name": "karan",
"descriptor": [
343,
43,
43
]
},
"Mark": {
"name": "Mark",
"descriptor": [
343,
43,
43
]
}
},{
"Jack": {
"name": "Jack",
"descriptor": [
28,
8,
43
]
}
}
我所期待的是:
{
"Karan": {
"name": "karan",
"descriptor": [
343,
43,
43
]
},
"Mark": {
"name": "Mark",
"descriptor": [
343,
43,
43
]
},
"Jack": {
"name": "Jack",
"descriptor": [
28,
8,
43
]
}
}
如果我们仔细观察,那么代码会将新内容作为全新的条目附加,而不是应该附加在单个条目的结束括号之后,如预期的输出代码所示。
有人可以帮我对代码进行哪些更改吗?
解决方案
您应该能够从文件中加载数据,添加用户,然后写回文件,如下所示:
const fs = require("fs");
const jsonData = require("./JsonFile.json");
const user = {
name: "Jack",
descriptor: [28,8,43]
};
jsonData[user.name] = user;
fs.writeFileSync("./JsonFile.json", JSON.stringify(jsonData, null, 4));
我还要看看非常方便的lowdb模块,它非常适合修改 Json 文件,具有一组强大的功能:
例如
const low = require('lowdb')
const FileSync = require('lowdb/adapters/FileSync')
const dbFileName = "JsonFile.json";
const adapter = new FileSync(dbFileName)
const db = low(adapter)
const user = {
name: "Jimmy",
descriptor: [28,8,43]
};
// Add another entry
db.read().set(user.name, user).write();
推荐阅读
- html - How can I vertically center a div on any resolution?
- azure - 在 Azure 的 Tomcat Web App 中定位标准输出日志
- coq - 如何使用 Proof General + Emacs 编译 Coq 文件?
- django - Django 教程和 Sqlite 命令行
- rust - 如何编写一个宏来匹配略有不同的匹配语句?
- c++ - 在我尝试使用 UTF-16- 字符串 (C++) 打开后,Ofstream 不起作用
- azure - 从 EventSender 迁移到 PartitionSender - 如何判断发件人是否已关闭?
- swift - 第一次用户在collectionview Swift 5中添加图像单元格时显示选择的图像而不是默认图像
- oauth - 如何防止 OAuth 服务器记住用户?
- python - 重新采样重复的时间序列