【问题标题】:Unexpected token : in JSON at position 603069意外令牌:在 JSON 中的位置 603069
【发布时间】:2019-05-06 20:39:34
【问题描述】:

我在服务中收到以下对象,但在解析此对象时出现错误

SyntaxError: Unexpected token : in JSON at position 603069

代码:

        var data1 = [];
        // Process a chunk of data. This may be called multiple times.
        req
          .on("data", function(chunk) {
            // Append to buffer
            data1.push(chunk);
          })
          .on("end", function() {
            var buffer = Buffer.concat(data1);
            console.info("Buffer Data Request Body: " + buffer);
            buffer = buffer.toString("utf8");
            var partsOfStr = buffer.split("&");

            //This line gives error
            var obj = JSON.parse(
              decodeURI(buffer.replace(/&/g, '","').replace(/=/g, '":"'))
            );

对象:

{
       "type" : "NewThreadVoice",
       "incidentId": "398115",
       "channel" : "Mobile",
       "data": a huge base 64 string 
       "fileName": "1.aac",
       "contentType" : "aac",
       "contactId" : "954344"
} 

当我将 base64(数据值)减少到一半时,它可以工作。

【问题讨论】:

  • = 是 base64 中的有效字符,因此它可能是您的 base64 字符串的一部分。当您执行.replace(/=/g, '":"') 时,您可能会替换该字符串的一部分,创建类似"data": "aacasc":"asdasd", 的内容,这不是有效的JSON。
  • 谢谢。它有帮助

标签: node.js


【解决方案1】:

base64 字符串不必只包含一个“=”字符。该字符用于填充(更多信息参见Why does a base64 encoded string have an = sign at the end

例如home在base64中的编码是aG9tZQ==。使用您的代码 (.replace(/=/g, '":"')),这将转换为 aG9tZQ":"":"

您应该使用.replace(/=+/g, '":"') 替换所有连续的= 字符。

【讨论】:

    猜你喜欢
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 2021-09-12
    • 2018-10-17
    相关资源
    最近更新 更多