Node.js 中 json 输入的意外结束

Posted

技术标签:

【中文标题】Node.js 中 json 输入的意外结束【英文标题】:Unexpected end of json input in Node.js 【发布时间】:2017-12-15 05:42:00 【问题描述】:

我有 Json 数据,我在我的 node.js 服务器中将其作为发布数据接收。

但问题是,它无法解析我发送的字符串。这是我的 node.js 服务器代码。

res.header("Access-Control-Allow-Origin", "*");
  req.on('data',function(data)
  
    var done=false;
    console.log(data);
    var schema;

    schema=JSON.parse(data);
   

这里我在解析 json 数据(数据)时遇到错误。

undefined:776



SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at IncomingMessage.<anonymous> (/Users/as6/Documents/test/server.js:206:17)
    at emitOne (events.js:115:13)
    at IncomingMessage.emit (events.js:210:7)
    at IncomingMessage.Readable.read (_stream_readable.js:462:10)
    at flow (_stream_readable.js:833:34)
    at resume_ (_stream_readable.js:815:3)
    at _combinedTickCallback (internal/process/next_tick.js:102:11)
    at process._tickCallback (internal/process/next_tick.js:161:9)

我使用 JSONLint 验证了 JSON 数据的语法错误。但这绝对没问题。我不知道出了什么问题以及如何纠正它。

【问题讨论】:

先尝试 JSON.stringify 然后检查它是否真的是正确的格式?如果是,那么试试这个: JSON.parse(JSON.stringify(data)) 【参考方案1】:

data 事件可以触发多次次,因此您必须收集所有data 值并在end 事件触发时将它们连接在一起:

let chunks = [];

req.on('data', function(data) 
  chunks.push(data);
).on('end', function() 
  let data   = Buffer.concat(chunks);
  let schema = JSON.parse(data);
  ...
);

但是,也许您应该考虑使用body-parser

【讨论】:

非常感谢......我很容易实现 @robertklep 嘿,我尝试了这个解决方案,我收到一个错误错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头。你能帮忙吗? @mamadgiaishwarya 这个问题与这个问题和我的回答没有严格的关系。如果您可以在某个地方在线编码,我会看看。否则,请在 SO 上搜索该错误以找出其原因。【参考方案2】:

换行

schema = JSON.parse(data);

进入

schema = JSON.parse(JSON.stringify(data));

【讨论】:

以上是关于Node.js 中 json 输入的意外结束的主要内容,如果未能解决你的问题,请参考以下文章

无法读取 JSON:字段名称中出现意外的输入结束

json输入意外结束反应[重复]

执行 mochawesome-merge 时出现“JSON 输入意外结束”

构建管道中的 NPM“解析附近时 JSON 输入意外结束”

Golang json Unmarshal “JSON 输入意外结束”

JSON.parse()返回输入的意外结束