Javascript 在express.js中循环处理json数据
我试图循环一个json文件并挑出每一集,但我很困惑,我的循环只输出第一集<代码>当前集代码>,如果有人能检查我的问题,我将不胜感激Javascript 在express.js中循环处理json数据,javascript,json,node.js,express,Javascript,Json,Node.js,Express,我试图循环一个json文件并挑出每一集,但我很困惑,我的循环只输出第一集当前集,如果有人能检查我的问题,我将不胜感激 app.get('/episodes', function(req, res){ fs.readFile('channels.json', 'utf8', function (err, data) { var jsondata = JSON.parse(data); for (var i=0; i<jsondata.channels.
app.get('/episodes', function(req, res){
fs.readFile('channels.json', 'utf8', function (err, data) {
var jsondata = JSON.parse(data);
for (var i=0; i<jsondata.channels.length; i++){
var myChannel = jsondata.channels[i].current_episode;
res.send(myChannel);
}
})
});
res.send
写入数据并结束请求。请尝试以下方法:
app.get('/episodes', function(req, res){
fs.readFile('channels.json', 'utf8', function (err, data) {
var jsondata = JSON.parse(data);
res.writeHead(200, {'Content-Type': 'text/plain'});
for (var i=0; i<jsondata.channels.length; i++){
var myChannel = jsondata.channels[i].current_episode;
res.write(JSON.stringify(myChannel));
}
res.end();
})
});
app.get('/scents',函数(req,res){
fs.readFile('channels.json','utf8',函数(err,data){
var jsondata=JSON.parse(数据);
res.writeHead(200,{'Content-Type':'text/plain'});
for(var i=0;ires.send
写入数据并结束请求。请尝试以下操作:
app.get('/episodes', function(req, res){
fs.readFile('channels.json', 'utf8', function (err, data) {
var jsondata = JSON.parse(data);
res.writeHead(200, {'Content-Type': 'text/plain'});
for (var i=0; i<jsondata.channels.length; i++){
var myChannel = jsondata.channels[i].current_episode;
res.write(JSON.stringify(myChannel));
}
res.end();
})
});
app.get('/scents',函数(req,res){
fs.readFile('channels.json','utf8',函数(err,data){
var jsondata=JSON.parse(数据);
res.writeHead(200,{'Content-Type':'text/plain'});
对于(var i=0;i试着构建一系列你的剧集
app.get('/episodes', function(req, res){
fs.readFile('channels.json', 'utf8', function (err, data) {
var jsondata = JSON.parse(data),
myChannel = [];
for (var i=0; i<jsondata.channels.length; i++){
myChannel.push( jsondata.channels[i].current_episode );
}
res.send( myChannel.join("\n") );
})
});
app.get('/scents',函数(req,res){
fs.readFile('channels.json','utf8',函数(err,data){
var jsondata=JSON.parse(数据),
myChannel=[];
对于(var i=0;i试着构建一系列你的剧集
app.get('/episodes', function(req, res){
fs.readFile('channels.json', 'utf8', function (err, data) {
var jsondata = JSON.parse(data),
myChannel = [];
for (var i=0; i<jsondata.channels.length; i++){
myChannel.push( jsondata.channels[i].current_episode );
}
res.send( myChannel.join("\n") );
})
});
app.get('/scents',函数(req,res){
fs.readFile('channels.json','utf8',函数(err,data){
var jsondata=JSON.parse(数据),
myChannel=[];
对于(var i=0;i,因为循环中有res.send(myChannel),res.send在查找时发送第一个通道,并忽略对res.send()的下一个调用
相反,您应该将所有通道连接成一个字符串,并在循环外部发出res.send(allChannels)。因为您在循环内部有res.send(myChannel)。res.send会在找到时发送第一个通道,并忽略对res.send()的下一个调用
function search_items( args ) {
if ( args ) {
string = args.toLowerCase().replace(/"/g, "").replace(/'/g, "").split(" ");
for ( var i=0, j=0; i<string.length; i++ ) {
(function(i){
vocabulary.findOne({word:string[i]}, function(error, search){ // find vocabulary info
if ( !error && search ) {
j++;
pages.findOne({voc_id:ObjectID(search._id)}, function(error, pages){ // find pages info
if ( !error && pages ) {
page_tokens.findOne({page_id:ObjectID(pages._id), voc_id:ObjectID(search._id)}, function(error, page_token){ // find page tokens info
if ( !error && page_token ) {
pos_tags.findOne({_id:ObjectID(page_token.pos_tag_id)}, function(error, pos_tag){ // find pos_tags info
if ( !error && pos_tag ) {
resultTotal.push({vocabulary:search.word, pages:{doc:pages.base_url+pages.path}, page_tokens:{sentence_number:page_token.sentance_number,token_position: page_token.token_position}, pos_tags: { tag:pos_tag.tag } });
j--;
console.log(j);
if ( j==0 ) {
res.json({success:resultTotal});
}
} else {
res.json({ error:true });
}
});
}
});
}
});
}
});
})(i)
}
}
}
相反,您应该将所有通道连接成一个字符串,并在循环外部发出res.send(allChannels)。函数搜索项目(args){
function search_items( args ) {
if ( args ) {
string = args.toLowerCase().replace(/"/g, "").replace(/'/g, "").split(" ");
for ( var i=0, j=0; i<string.length; i++ ) {
(function(i){
vocabulary.findOne({word:string[i]}, function(error, search){ // find vocabulary info
if ( !error && search ) {
j++;
pages.findOne({voc_id:ObjectID(search._id)}, function(error, pages){ // find pages info
if ( !error && pages ) {
page_tokens.findOne({page_id:ObjectID(pages._id), voc_id:ObjectID(search._id)}, function(error, page_token){ // find page tokens info
if ( !error && page_token ) {
pos_tags.findOne({_id:ObjectID(page_token.pos_tag_id)}, function(error, pos_tag){ // find pos_tags info
if ( !error && pos_tag ) {
resultTotal.push({vocabulary:search.word, pages:{doc:pages.base_url+pages.path}, page_tokens:{sentence_number:page_token.sentance_number,token_position: page_token.token_position}, pos_tags: { tag:pos_tag.tag } });
j--;
console.log(j);
if ( j==0 ) {
res.json({success:resultTotal});
}
} else {
res.json({ error:true });
}
});
}
});
}
});
}
});
})(i)
}
}
}
如果(args){
string=args.toLowerCase().replace(/“/g,”).replace(/“/g,”).split(“”);
对于(var i=0,j=0;i函数搜索_项(args){
如果(args){
string=args.toLowerCase().replace(/“/g,”).replace(/“/g,”).split(“”);
对于(var i=0,j=0;i我发现的最简单的方法是:
您可以尝试以下操作,但它也会将所有键加载到内存中
Object.keys(o).forEach(function(key, index, originalObject) {
var val = o[key];
logic();
});
然而,由于Object.keys是一种本机方法,因此它可能允许更好的优化
虽然这是我一直会做的代码,但在检查这是否是做事情的最佳方法时,我在这里发现了这一点(稍微透明一些的代码):我发现的最简单的方法是:
您可以尝试以下操作,但它也会将所有键加载到内存中
Object.keys(o).forEach(function(key, index, originalObject) {
var val = o[key];
logic();
});
然而,由于Object.keys是一种本机方法,因此它可能允许更好的优化
虽然这是我一直会做的代码,但在检查这是否是做事情的最佳方式时,我在这里发现了这一点(稍微透明一些的代码):我得到了一个输出,所有数据都是对象[object object]哦,是的,你需要在当前的_集上有另一个循环,因为它也是一个基于你的结构的数组。我得到了一个输出,所有数据都是object[object]Oops,是的,你需要在当前的节目中有另一个循环,因为它也是基于你的结构的数组。Get errorTypeError:第一个参数必须是字符串或缓冲区,如果myChannel
不是一个字符串,你需要将它转换成一个。最简单的是JSON.stringify(myChannel)
@nihulus如果title
是current\u插曲
的一个属性,你就应该这样做。@nihulus那么current\u插曲
在这种情况下必须是null
。将其记录到控制台以帮助调试。出现错误类型错误:第一个参数必须是字符串或缓冲区
@nihulus如果myChannel
不是您需要将其转换为一个字符串。最简单的是JSON.stringify(myChannel)
@nihulus,如果title
是current\u插曲
的一个属性,那么就是这样做的。@nihulus那么current\u插曲
在这种情况下必须是null
。将它记录到控制台以帮助调试它。