nodejs:解析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

我创建了一个测试服务器,它发送字符串化的JSON块。当我连接到服务器时,它会发送无效的JSON,我一辈子都不知道为什么。输出增加了一个额外的双引号

服务器代码:

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”“
?呃,谢谢。我在做了更改后忘记重新运行节点服务器,这让我觉得它不起作用:/