javascript - 从 websocket 接收看似封装的 JSON。我该如何处理这种格式?
问题描述
每条收到的消息都以一个数字开头,后跟似乎是封装的 JSON。
JSON.parse()显然在这里不起作用。
0{"sid":"ZH4b_LP4asdas","upgrades":[],"pingInterval":25000,"pingTimeout":5000}
40
42["request","{\"api_key\":\"blablabla\",\"version\":2,\"step\":{\"type\":\"CATCHER\",\"params\":{},\".......\"}"]
3
3 .......
这种数据格式是否有一些通用名称或规范,我该如何解码?
PS:我正在使用 node.js ws websocket,并且必须发送“2”个 ping 以维持连接。
解决方案
以粗鲁的方式完成。如果你认为我做不到,那就错了。但如果有其他方法,请告诉我!:)
编辑:当然,必须为实际数据添加斜杠。
function stripslashes(str) {
str = str.replace(/\\'/g, '\'');
str = str.replace(/\\"/g, '"');
str = str.replace(/\\0/g, '\0');
str = str.replace(/\\\\/g, '\\');
return str;
}
var data= '0{"sid":"ZH4b_LP4asdas","upgrades":[],"pingInterval":25000,"pingTimeout":5000}'
var match = data.match(/^\d+/);
if (!match) {console.log('corrupted data'); return}
var channel = match[0]; //channel
var message = data.slice(match[0].length);
if (!message) {console.log('empty message'); return}
message=message.replace(/^\[.*?,"|"\]$/g, ""); //extracting from array formation
message=stripslashes(message);
data=JSON.parse(message);
console.log(data); //log the data
if (typeof data.step != 'undefined' && typeof data.step.data != 'undefined' && typeof data.step.data.body != 'undefined')
console.log(Buffer.from(data.step.data.body,'base64').toString()); //extract base64 body of the message within
推荐阅读
- python - 熊猫 style.background_gradient 忽略 NaN
- angularjs - 值如何在 indexOf() 中传递?
- javascript - 如何让 node.js 控制台在 Visual Studio 2017 中暂停?
- java - 来自 Spring Boot/Angular 应用程序的密码更新
- javascript - IFrame 在 iPad 上不会缩小
- javascript - 如何将画布的宽度和高度设置为浏览器的所有高度和宽度而不会溢出?
- grails - 防止 Grails fieldValue 格式化数字
- ajax - 如何通过获取请求而不抛出错误来获取 ajax 调用
- java - 获取 ArrayList 列表
- java - Java:间歇性地解析 CSV 文件无法读取 File 中的 170K 行