node.js - 意外的令牌:在 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(数据值)减少到一半时,它可以工作。
解决方案
base64 字符串不必只包含一个“=”字符。此字符用于填充(有关更多信息,请参阅为什么 base64 编码的字符串末尾有 = 符号)
例如,home
base64 中的编码是aG9tZQ==
. 使用您的代码 ( .replace(/=/g, '":"')
),这将转换为aG9tZQ":"":"
您应该.replace(/=+/g, '":"')
用于替换所有连续的=
字符。
推荐阅读
- spring - 我可以独立使用spring批处理中的spring ItemProcessor吗?
- sublimetext - 如何使 Sublime Text 3 以文本形式打开文件
- ios - iOS 上的 Metal 是否支持 SIMD 组?
- react-native - 反应原生复活
- java - oracle 12c 中的数据库更改通知
- angular - 使用字符串插值在 Angular 中显示漂亮的 XML
- sql - 如何从 SSIS 或 SQL 中的字符串字段中删除不需要的数字和/或特殊字符
- python - Elastalert 在模块 stomp 中无法从时间导入单调
- python - 使用 Flask、python 根据用户输入自动生成 SQL 脚本
- elasticsearch - 按内部多桶聚合内的源字段对多桶聚合进行排序