【问题标题】:How to append JSON data to existing JSON file node.js如何将 JSON 数据附加到现有 JSON 文件 node.js
【发布时间】:2018-11-17 17:47:27
【问题描述】:

如何使用逗号“,”作为分隔符附加现有 JSON 文件

anchors = [ {  "title":"  2.0 Wireless " }  ]
fs.appendFileSync('testOutput.json', JSON.stringify(anchors));

当前代码的输出是这样的

[
   {
     "title":"  2.0 Wireless "
   }
 ]
 [
   {
     "title":"  Marshall Major II "
   }
]

如何以正确的格式使用逗号“,”作为分隔符

我想要这样的东西

[
   {    
    "title":"  2.0 Wireless "
   },
   {
     "title":"  Marshall Major II "
   }
]

【问题讨论】:

  • require()ing 文件,调整 JavaScript 对象结构并再次写入文件怎么样?注意:即使在第一个示例中的两个数组之间存在,,它也不是有效的 JSON。仅仅通过附加东西来保持有效的 JSON 是不可能的
  • 我认为它不是有效的 JSON。您可以创建一个数组数组或包含几个数组的对象。
  • 如果您将大量附加到文件中,则 csv 可能是比 JSON 更好的选择。使用 JSON,每次编辑时都必须读取整个文件。

标签: json node.js append stringify


【解决方案1】:

试试这个。不要忘记定义anchors 数组。

var data = fs.readFileSync('testOutput.json');
var json = JSON.parse(data);
json.push(...anchors);

fs.writeFile("testOutput.json", JSON.stringify(json))

【讨论】:

  • 这几乎可以让我的输出看起来像这样 [ { "title":" 2.0 Wireless " }, [{ "title":" Marshall Major II " }] ]
【解决方案2】:

我创建了两个小函数来处理要追加的数据。

  1. 第一个函数将:读取数据并将 JSON 字符串转换为 JSON 数组
  2. 然后我们将新数据添加到 JSON 数组中
  3. 我们将 JSON-array 转换为 JSON-string 并将其写入文件

示例:您想将数据 { "title":" 2.0 Wireless " } 添加到同一文件夹根目录下的文件 my_data.json 中。只需调用 append_data (file_path , data ) ,

如果文件存在,它将在 JSON 文件中附加数据。否则它将创建文件并向其中添加数据。

data = {  "title":"  2.0 Wireless " }
file_path = './my_data.json'
append_data (file_path , data )

完整的代码在这里:

   const fs = require('fs');
   data = {  "title":"  2.0 Wireless " }
   file_path = './my_data.json'
   append_data (file_path , data )

   async function append_data (filename , data ) {

    if (fs.existsSync(filename)) {
        read_data = await readFile(filename)
        if (read_data == false) {
            console.log('not able to read file')
        }
        else {
            read_data.push(data)
            dataWrittenStatus = await writeFile(filename, read_data)
            if dataWrittenStatus == true {
              console.log('data added successfully')
            }
           else{
              console.log('data adding failed')
            }
        }
      else{
          dataWrittenStatus = await writeFile(filename, [data])
          if dataWrittenStatus == true {
              console.log('data added successfully')
          }
          else{
             console.log('data adding failed')
           }
      }
   }



    async function readFile  (filePath) {
      try {
        const data = await fs.promises.readFile(filePath, 'utf8')
        return JSON.parse(data)
      }
     catch(err) {
         return false;
      }
    }

    async function writeFile  (filename ,writedata) {
      try {
          await fs.promises.writeFile(filename, JSON.stringify(writedata,null, 4), 'utf8');
          return true
      }
      catch(err) {
          return false
      }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 2012-10-11
    • 1970-01-01
    相关资源
    最近更新 更多