【问题标题】:How to read remove some lines from json file using node.js如何使用 node.js 从 json 文件中读取删除一些行
【发布时间】:2021-01-27 15:10:39
【问题描述】:

我想从 json 文件中提取一些数据注释行,在将它们制成某种格式后,我需要删除它们。我在下面解释我的 json 文件。

test.json:

#PATH:/test/
#DEVICES:div1
#TYPE:p1
{
  name:'Raj',
  address: {
     city:'bbsr'
  }
}

以上文件是一个测试json文件。在这里,我需要阅读开头包含# 的行,然后将它们作为const obj ={PATH:'/test/',DEVICES:'div1',TYPE:p1} 之类的单独对象,最后使用node.js 从原始test.json 文件中删除这3 行

【问题讨论】:

    标签: node.js json fs


    【解决方案1】:

    下面的sn -p可以用来解决这个问题。它可以处理任意数量的类似 cmets。

    const fs = require('fs')
    const readline = require('readline');
    const filepath = '/Users/.../nodeText.json';    // file to read from
    const writePath = '/Users/.../nodeFileResult.json'  // file to write to
    const inputStream = fs.createReadStream(filepath)
    const startLine = 'const obj = {\n';
    let content = '';
    
    const readPromise = new Promise(function(resolve, reject) {
        const lineReader = readline.createInterface({
            input: inputStream
        });
    
        inputStream.on('end', () => {
            resolve('end');
        });
    
        lineReader.on('line', (line) => {
            let resultText = '';
            const replaceDict = {
                '#': '"',
                ':': '": "',
                '\n': '",\n'
            };
            const regexString = /#|:|\n/;
            const re = new RegExp(regexString, 'gim');
            if(line.startsWith('#')) {
                resultText = (line+`\n`).replace(re, (match) => {  // \n to make sure its line end and for regex to work
                    return replaceDict[match];
                });
            } else if(line.startsWith('{')) {
                resultText = line.replace('{', `}, \n {`);
            } else {
                resultText = line
            }
            content = content + resultText;
        });
    });
    
    readPromise
        .then((resolve) => {
            if(resolve === 'end') {
                content = startLine + content
                fs.writeFile(writePath, 
                    content, 
                    error => {
                    if (error) {
                        console.error(error)
                        return
                    }
                })
            }
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-09
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多