在Node.js中的一个机器人上工作,该机器人扩展了另一个机器人创建的数据。 Bot将所有数据输出到JSON页面https://mee6.xyz/levels/267482689529970698?json=1
但是我看不到JSONStream生成的数据的控制台输出。
我如何获得它以便可以将其用于我的扩展系统?
var request = require('request')
, JSONStream = require('JSONStream')
, es = require('event-stream')
request({url: 'https://mee6.xyz/levels/267482689529970698?json=1'})
.pipe(JSONStream.parse('rows.*'))
.pipe(es.mapSync(function (data) {
console.error(data)
var stream = JSONStream.parse(['rows', true, 'doc']) //rows, ANYTHING, doc
stream.on('data', function(data) {
console.log('received:', data);
});
//emits anything from _before_ the first match
stream.on('header', function (data) {
console.log('header:', data) // => {"total_rows":129,"offset":0}
})
}))
最佳答案
有几个问题。
似乎您混合了JSONStream文档中描述的2种方法。
首先,您要请求的JSON根本不包含名称为“ row”的任何字段,因此这是行不通的:.pipe(JSONStream.parse('rows.*'))
要查看输出,您可以执行以下操作:
request({url: 'https://mee6.xyz/levels/267482689529970698?json=1'})
//So I'm getting all the players records
.pipe(JSONStream.parse('players.*'))
.pipe(es.mapSync(function (data) {
console.log(data);
}));
检出JSONStream和JSONPath文档。
第二个是创建此流
stream = JSONStream.parse(['rows', true, 'doc'])
,然后将其完全丢失。您会注意到使用它。因此,如果您不喜欢第一种方法,可以这样做:
var stream = JSONStream.parse(['players']);
stream.on('data', function(data) {
console.log('received:', data);
});
stream.on('header', function (data) {
console.log('header:', data);
});
//Pipe your request into created json stream
request({url: 'https://mee6.xyz/levels/267482689529970698?json=1'})
.pipe(stream);
希望这可以帮助。