【问题标题】:Add square brackets at beginning and end of json file using Node.js使用 Node.js 在 json 文件的开头和结尾添加方括号
【发布时间】:2022-03-31 20:08:08
【问题描述】:

我有一个 JSON 文件,我想在 JSON 的开头和结尾添加一个方括号。 例如。 输入

{
"name": "Ram",
"age": 25
},
{
"name": "Laxman",
"age": 24
}

预期输出:

[
{
"name": "Ram",
"age": 25
},
{
"name": "Laxman",
"age": 24
}
]

这是一个示例响应,我的文件中有大量 JSON 数据。

【问题讨论】:

  • 输入为Objects,将它们推入数组中。
  • @RoguSmith 对象在 JSON 文件中,我如何迭代对象。你能举个例子解释一下吗?
  • 您的 JSON 无效,顶层不能有两个对象
  • @RoguSmith 我们应该认为 JSON 在文件中是有效的;只是需要一个例子。我可能是错的,所以 OP 应该检查一下。还有 OP,有一些库可以将 JSON 推送到数组或字典中,因此请尝试查看其中之一。
  • 试试这个包 npm i file-get-contents

标签: javascript node.js json


【解决方案1】:

最好的选择(在我看来)是打开一个新的阅读器;

  • 打开一个 BufferedReader
  • 追加[
  • 附加 JSON 文件
  • 追加]

您可以从那里使用 BufferedReader 或将其写入新文件。

【讨论】:

    【解决方案2】:

    所以,我们这里需要考虑两种情况:

    第一个是您负责创建此输入文件的时候。然后,假设您已经在数组中拥有这些对象,并且只需要保存数组本身而不是使用 for 保存单个对象。

    const fs = require('fs')
    
    const objs = [ { "name": "Ram","age": 25},{ "name": "Laxman","age": 24} ]
    const jsonData = JSON.stringify(objs)
    
    fs.writeFile("inputFile.json", jsonData, (err) => {
        if (err) {
            console.log(err);
        }
    });
    
    

    第二种情况,如果您在创建输入文件时无法控制修改输入文件,而只是转换先前保存的文件。在这种情况下,由于位置“插入”的fs 限制,您需要完全重写文件。为此,将前一个文件读入缓冲区,在其前面加上左括号“[”,并在末尾附加右括号“]”。如下:

    const fs = require('fs')
    
    const filename = 'inputFile.json'
    
    const fileBuffer = fs.readFileSync(filename)
    const newBuffer = Buffer.concat([Buffer.from('['), fileBuffer, Buffer.from(']')])
    fs.writeFileSync(filename, newBuffer)
    
    

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,经过数小时的搜索,我一无所获,所以我编写了一个自定义代码,就像一个魅力一样。希望对你有帮助!:)

      const fs = require('fs')
      var response = {};
      
      const fsOps = async (params) => {
      
          try {
              const path = "tmp/" + params.user + ".json";
              const data = params.data;
              const chunksNumber = params.chunksNumber;
              var chunkID = params.chunkID;
      
              //ON FIRST CHUNK ADD [ 
              if (chunkID === 1) {
                  fs.appendFile(
                      path, ("["), 'utf-8', function (err) {
                          if (err) throw err;
                      }
                  );
                  if (chunksNumber !== 1)
                      fs.appendFile(
                          path, JSON.stringify(data, null, 2) + ',', 'utf-8', function (err) {
                              if (err) throw err;
                          }
                      );
              }
      
              //WRITE CHUNKS
              if (chunkID !== 1 && chunkID < chunksNumber) {
                  fs.appendFile(
                      path, JSON.stringify(data, null, 2) + ',', 'utf-8', function (err) {
                          if (err) throw err;
                      }
                  );
              }
      
              //ON LAST CHUNK WRITE THE LAST CHUNK AND ADD ]
              if (chunkID === chunksNumber) {
                  console.log("LAST CHUNK")
                  fs.appendFile(
                      path, JSON.stringify(data, null, 2), 'utf-8', function (err) {
                          if (err) throw err;
                      }
                  );
      
                  //APPEND ] on the end of file
                  fs.appendFile(
                      path, ("]"), 'utf-8', function (err) {
                          if (err) throw err;
                      }
                  );
      
                  //READ THE FILE
                  fs.readFile(path, (err, data) => {
                      if (err) {
                          console.error(err)
                          return;
                      } else {
                          response = data;
                      }
                  })
      
                  //DELETE FILE
                  fs.unlink(path, (err) => {
                      if (err) {
                          console.error(err)
                          return err
                      }
                  })
              }
              //Return object with all the part data
              return JSON.parse(response);
      
          } catch (err) {
              //IN CASE OF ERROR DELETE FILE
              fs.unlink(path, (err) => {
                  if (err) {
                      console.error(err)
                      return err
                  }
              })
              return err;
          }
      }
      
      module.exports = fsOps;
      

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 2017-05-28
      • 2021-11-02
      • 1970-01-01
      • 2020-09-06
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多