Javascript Node js搜索并返回包含文件中字符串的行

时间:2018-04-02 18:24:23

标签: javascript json node.js

我是javascript的新手,并努力想出一个解决方案。我有一个包含JSON格式的行的文件。在下面的代码中,我已将JSON转换为对象并修剪每行上的空白区域并返回输出。

现在,我不仅需要删除空白区域,还要搜索文件的每一行中的字符串(由用户提供并作为变量传入),如果找到字符串,则应返回整行

我尝试了.includes(req.params.msg),但无法走向正确。

get(req, res) {
    let arry = [];
    const text = (fs.readFileSync('./pretty.out'));
    arry = (text.toString().split('\n'));
    let wat = [];
    arry.forEach(i => {
      if (!!i.trim()) {
        wat.push(JSON.parse(i));
      }
    });
    res.json(wat);
}

文件的内容将是,

{"foo" : "bar","bar" : "sit"}
{"foo" : "lorem","bar" : "ipsum"}
{"foo" : "dolor","bar" : "amet"}

如果用户输入sit,则输出应为

{"foo" : "bar","bar" : "sit"}

2 个答案:

答案 0 :(得分:1)

看起来你现在已经以数组格式获得了它,所以这应该可以正常工作:

// To return multiple query matches:
function search(query){
    return arr.filter(function(item){
        return JSON.stringify(item).match(query) !== null;
    })
}


// To return single (first) query match:
function search(query){
    return arr.find(function(item){
        return JSON.stringify(item).match(query) !== null;
    })
}

如果你没有将它转换为json对象数组,你可以使用:

function search(query){
    return file.match(new RegExp("{.+"+query+".+}", "g"))
}

这是一个小提琴: https://jsfiddle.net/1cqacj3b/11/(已修改为在html中显示结果

答案 1 :(得分:1)

// using fs.readFileSync is fine, but only during process boot time
// if the data is dynamic you'll need to read it async
const data = (fs.readFileSync('./pretty.out'), 'utf8')
  .split('\n')
  .filter(line => line.trim())
  .map(line => JSON.parse(line));

// input should use post requests         
post(req, res) {
    const query = req.body;
    let results = data.filter(d => d.bar === query);
    res.json(results);
}