nodejs:解析json块
我创建了一个测试服务器,它发送字符串化的JSON块。当我连接到服务器时,它会发送无效的JSON,我一辈子都不知道为什么。输出增加了一个额外的双引号 服务器代码:nodejs:解析json块,json,node.js,Json,Node.js,我创建了一个测试服务器,它发送字符串化的JSON块。当我连接到服务器时,它会发送无效的JSON,我一辈子都不知道为什么。输出增加了一个额外的双引号 服务器代码: const net = require('net'), server = net.createServer(function(connection) { console.log('subscriber connected.'); // send first chunk immediately connectio
const net = require('net'),
server = net.createServer(function(connection) {
console.log('subscriber connected.');
// send first chunk immediately
connection.write('{"type":"changed","file":"targ"');
let timer = setTimeout(function() {
connection.write('et.txt","timestamp":1358175758495}' + '\n');
connection.end();
}, 1000);
connection.on('end', function() {
clearTimeout(timer);
console.log('subscriber disconnected');
});
});
server.listen(5432, function() {
console.log('test server listening for subs...')
});
ldj.js
'use strict';
const
events = require('events'),
util = require('util'),
// client constructor
LDJClient = function(stream) {
events.EventEmitter.call(this);
let self = this;
let buffer = '';
stream.on('data', function(data) {
buffer += data;
console.log(buffer)
let boundary = buffer.indexOf('\n');
while(boundary !== -1) {
let input = buffer.substr(0, boundary);
buffer = buffer.substr(boundary + 1);
//self.emit('message', JSON.parse(input));
boundary = buffer.indexOf('\n');
}
});
};
util.inherits(LDJClient, events.EventEmitter);
// expose module methods
exports.LDJClient = LDJClient;
exports.connect = function(stream) {
return new LDJClient(stream);
};
输出:
{"type":"changed","file":"targ"
{"type":"changed","file":"targ"et.txt","timestamp":1358175758495}
那个额外的“不应该在”target.txt“值中。有什么想法吗
TIA比手动拆分字符串更重要的是,尝试获取整个字符串并将其拆分为块,然后发送:
var data = '{"type":"changed","file":"target.txt","timestamp":1358175758495}';
var chunks = data.match(/.{1,10}/g); // 10 symbol chunks
for(var i = 0; i < chunks.length; i++) {
var chunk = chunks[i];
setTimeout(function() {
if(connection) {
connection.write(chunk+'\n');
if(i + 1 == chunks.length) {
connection.end();
}
}
}, i*1000);
}
connection.on('end', function() {
console.log('subscriber disconnected');
});
var data='{“type”:“changed”,“file”:“target.txt”,“timestamp”:1358175758495};
var chunks=data.match(/.{1,10}/g);//10个符号块
for(var i=0;i
您可以发布服务器代码吗?您需要确保正确地缓冲到换行符,而不是解析。输出中根本没有引用文件
,这表明服务器上出现了一些问题。在targ
之后额外加上双引号:“{”type:“changed”,“file:“targ”“
?呃,谢谢。我在做了更改后忘记重新运行节点服务器,这让我觉得它不起作用:/