我是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"}
答案 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);
}