首页 > 解决方案 > 意外的令牌:在 JSON 中的位置 603069

问题描述

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

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(数据值)减少到一半时,它可以工作。

标签: node.js

解决方案


base64 字符串不必只包含一个“=”字符。此字符用于填充(有关更多信息,请参阅为什么 base64 编码的字符串末尾有 = 符号

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

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


推荐阅读