【问题标题】:read/parse json data from socket in node从节点中的套接字读取/解析 json 数据
【发布时间】:2011-12-06 13:10:40
【问题描述】:

我有一个 node.js net tcp 服务器,我从客户端接收 json 数据。我想缓冲它,直到整个 json 块到达,而不是解析它,也许只是将它转发到其他地方。有哪些与最新节点(0.6.x)兼容的模块?

应该很快,如果是纯js的话对我来说更好。

b.

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    嗯,用于缓冲的 net 模块,用于解析器的 JSON.parse(),抱歉似乎很明显,但是... 查看 : https://github.com/nodejitsu/node-http-proxy 转发

    【讨论】:

    • 我知道 JSON.parse() 会解析我的字符串,但是如果我在第一个包中得到 this:'{"key":"val' 而不是在第二个包中得到其余部分:'ue “}”?我无法解析它们中的每一个,只能解析两者。但它可能更复杂,如果我得到很多 json 字符串,或者当一个完整的 json 字符串到达​​时,http-proxy 会触发这种事件?
    【解决方案2】:

    在再次考虑并用一个非常简单直接的解决方案解决它之后,我已经研究了好几个小时。

    我的应用程序正在接收 utf-8 编码的 JSON 数据,有时是相当大的数据。最后,我还有大量的 JSON 文档,我需要完成这些文件才能成功解析它们。

    我的解决方案是一个简单的字符串缓冲区变量,只要我会收到一个“新行”又名“\n”,我就会用传入的数据填充它。然后我“传递”要解析的数据并继续用下一条消息填充缓冲区。

    我的代码如下:

    var buffer = '';
    client.on('data', function(data) {
        if (data.indexOf('\n') < 0) {
          buffer += data;
        } else {
          var msg = buffer + data.substring(0, data.indexOf('\n'));
          buffer = data.substring(data.indexOf('\n') + 1);
    
          console.log('Sending msg: ' + msg);
        }
    }
    

    此解决方案之所以有效,是因为我的协议基于 utf-8 并且以 '\n' 作为分隔符。

    【讨论】:

    • 感谢您的代码,我以类似的方式解决了它。我计算“{”和“}”字符的数量,此时“}”字符的数量等于“{”字符的数量我解析字符串,否则我缓冲它。我这里没有上传代码是因为没时间测试,还有其他事情要做……不过对我来说这似乎是一个很常见的问题,我很惊讶没有一个通用的解决方案。
    • 我发现我对该代码有一些赛车条件。有时缓冲区会被附加回调覆盖。是这样还是我搞错了?
    • 不知道,也许你应该在 StackOverflow 上发布一个关于此的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 2015-05-18
    相关资源
    最近更新 更多