首页 > 解决方案 > 如何使用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
]
}
}

如果我们仔细观察,那么代码会将新内容作为全新的条目附加,而不是应该附加在单个条目的结束括号之后,如预期的输出代码所示。

有人可以帮我对代码进行哪些更改吗?

标签: node.jsjson

解决方案


您应该能够从文件中加载数据,添加用户,然后写回文件,如下所示:

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();

推荐阅读