Javascript 从websocket接收看似封装的JSON。如何处理这种格式?

Javascript 从websocket接收看似封装的JSON。如何处理这种格式?,javascript,node.js,websocket,encapsulation,Javascript,Node.js,Websocket,Encapsulation,每个接收到的消息都以一个数字开头,后面紧跟着似乎是封装的JSON JSON.parse()显然在这里不起作用 0{"sid":"ZH4b_LP4asdas","upgrades":[],"pingInterval":25000,"pingTimeout":5000} 40 42["request","{\"api_key\":\"blablabla\",\"version\":2,\"step\":{\"type\":\"CATCHER\",\"params\":{},\".......\"}"

每个接收到的消息都以一个数字开头,后面紧跟着似乎是封装的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

用粗野的方式做。如果你认为我做不到,那你就错了。但是如果有其他方法,请告诉我!:)

编辑:当然,必须为实际数据添加带斜线

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