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