Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Nodejs无法解析长JSON文件_Javascript_Node.js - Fatal编程技术网

Javascript Nodejs无法解析长JSON文件

Javascript Nodejs无法解析长JSON文件,javascript,node.js,Javascript,Node.js,我有一个JSON文件,如下所示。虽然对于一个例子来说,文件本身似乎太长了,但我之所以要包含它是有原因的。基本上,我觉得我的文件太大,无法通过TCP传输到我的实时站点 { "FormatNumber": 1, "Team_Types": [{ "Teams": "EmmersonCod", "Channels": [{ "Team_Name": "Tanaka",

我有一个JSON文件,如下所示。虽然对于一个例子来说,文件本身似乎太长了,但我之所以要包含它是有原因的。基本上,我觉得我的文件太大,无法通过TCP传输到我的实时站点

{
    "FormatNumber": 1,
    "Team_Types": [{
            "Teams": "EmmersonCod",
            "Channels": [{
                    "Team_Name": "Tanaka",
                    "Team_Members": 1,
                    "Team_Mascot": "Dolphin"
                },
                {
                    "Team_Name": "Drago",
                    "Team_Members": 2,
                    "Team_Mascot": "Lundgren"
                },
                {
                    "Team_Name": "Apollo",
                    "Team_Members": 3,
                    "Team_Mascot": "Crews"
                },
                {
                    "Team_Name": "Cobra",
                    "Team_Members": 4,
                    "Team_Mascot": "Kai"
                }
            ]
        },
        {
            "Teams": "Candy",
            "Channels": [{
                    "Team_Name": "Simson",
                    "Team_Members": 1,
                    "Team_Mascot": "The"
                },
                {
                    "Team_Name": "Rick",
                    "Team_Members": 2,
                    "Team_Mascot": "Sanchez"
                }
            ]
        },
        {
            "Teams": "FoxNews",
            "Channels": [{
                    "Team_Name": "David",
                    "Team_Members": 1,
                    "Team_Mascot": "Bannon"
                },
                {
                    "Team_Name": "Rickety",
                    "Team_Members": 2,
                    "Team_Mascot": "Crickett"
                },
                {
                    "Team_Name": "Lady",
                    "Team_Members": 3,
                    "Team_Mascot": "Madam"
                },
                {
                    "Team_Name": "Random",
                    "Team_Members": 4,
                    "Team_Mascot": "Words"
                },
                {
                    "Team_Name": "Put",
                    "Team_Members": 5,
                    "Team_Mascot": "Together"
                },
                {
                    "Team_Name": "To",
                    "Team_Members": 6,
                    "Team_Mascot": "Fill"
                },
                {
                    "Team_Name": "These",
                    "Team_Members": 7,
                    "Team_Mascot": "Blanks"
                },
                {
                    "Team_Name": "And",
                    "Team_Members": 8,
                    "Team_Mascot": "Illustrate"
                },
                {
                    "Team_Name": "The",
                    "Team_Members": 9,
                    "Team_Mascot": "Issues"
                },
                {
                    "Team_Name": "We",
                    "Team_Members": 10,
                    "Team_Mascot": "Are"
                },
                {
                    "Team_Name": "Going",
                    "Team_Members": 11,
                    "Team_Mascot": "Through"
                },
                {
                    "Team_Name": "At",
                    "Team_Members": 12,
                    "Team_Mascot": "This"
                },
                {
                    "Team_Name": "Very",
                    "Team_Members": 13,
                    "Team_Mascot": "Moment"
                },
                {
                    "Team_Name": "The",
                    "Team_Members": 14,
                    "Team_Mascot": "JSON"
                },
                {
                    "Team_Name": "Is",
                    "Team_Members": 15,
                    "Team_Mascot": "Too"
                },
                {
                    "Team_Name": "Long",
                    "Team_Members": 16,
                    "Team_Mascot": "For"
                },
                {
                    "Channl_Name": "My",
                    "Team_Members": 17,
                    "Team_Mascot": "TCP"
                },
                {
                    "Team_Name": "To",
                    "Team_Members": 18,
                    "Team_Mascot": "Go"
                }
            ]
        }
    ]
}
我正在使用Node.js代码来解析它,如下所示:

var express = require('express');
var net = require("net");
var fs = require("fs");
var request = require('request');
var app = express();
var server = net.createServer();
var pack;

app.use(function(req, res, next){
    res.header("Access-Control-Allow-Origin", "*");
    next();
});

server.on("connection", function(socket){
    pack = "";
    socket.setEncoding('utf8');
        socket.on("data", function(d){
            pack = JSON.parse(d);
            console.log(pack.Timestamp.LocalTimestamp);
            app.set('dee', d);
                app.get("/"+pack.FormatNumber, function(req, res){
                    res.writeHead(200, {'Content-Type': 'text/plain'});
                    res.write(req.app.get('dee'));
                    res.end();
                });
        });
        socket.once("close", function(){
            console.log("connection closed");
        });
});

server.on("error", function(){
    console.log("connection error");
});

server.listen(9000, function(){
    console.log("Server Listening to Port 9000");
});

app.listen(8081, function(){

});
这个JSON文件作为TCP数据包发送到我的节点服务器,然后由节点服务器解析它。代码和功能在我的本地主机环境中完美地工作。但是,当尝试将JSON文件推送到Digitalocean Node.js服务器上时,我遇到以下错误

undefined:57
                                        "Cha
                                         ^

SyntaxError: Unexpected token C
    at Object.parse (native)
    at Socket.<anonymous> 
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at readableAddChunk (_stream_readable.js:146:16)
    at Socket.Readable.push (_stream_readable.js:110:10)
    at TCP.onread (net.js:523:20)
未定义:57
“恰恰
^
SyntaxError:意外的令牌C
at Object.parse(本机)
在插座上。
在emitOne(events.js:77:13)
位于Socket.emit(events.js:169:7)
在readableAddChunk(_stream_readable.js:146:16)
在Socket.Readable.push(_stream_Readable.js:110:10)
在TCP.onread(net.js:523:20)
如果我减少了JSON数组中的对象数量,那么将其传递到live server会按预期工作。我不清楚为什么会这样。TCP数据包只通过较小的JSON文件进行解析。

尽管TCP通过IP数据包发送数据,但TCP不是一个数据包协议。TCP套接字只是一个数据流。因此,将
数据
事件视为逻辑消息是不正确的。换句话说,一端的一个
套接字。写入
并不等同于o上的一个
数据
事件一个
数据
事件可能包含多条消息、一条消息或一条消息的一部分

好消息是这个问题已经解决了很多次。我建议:

  • 用于通过TCP传递JSON消息
  • 使用redis之类的工具作为发布订阅消息解决方案(此选项使您的应用程序更易于扩展)
  • 如果您知道两个应用程序将始终在同一台计算机上运行,则应使用节点的

进一步阅读如何构成net.Socket“数据”块: