Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中将字符串对象从套接字转换为键、值对并在html上显示_Javascript_Arrays_Sockets_Websocket_Telnet - Fatal编程技术网

如何在Javascript中将字符串对象从套接字转换为键、值对并在html上显示

如何在Javascript中将字符串对象从套接字转换为键、值对并在html上显示,javascript,arrays,sockets,websocket,telnet,Javascript,Arrays,Sockets,Websocket,Telnet,使用webtcp,我在socket和websocket之间搭建了一座桥梁,可以从机器上获取数据并在浏览器上显示。但这些数据是原始数据,需要进行解析。我能够解析它直到数组对象,但并没有进一步的成功。无论我做什么,它都会作为一个对象返回。 以下是来自套接字的初始原始数据: received: 2018-08-13T16:43:34.0689|power|ON|mode|MANUAL|execution|READY|Xact|0.00|Yact|0.00|Zact|0.00|Xcom|0.00|Yco

使用webtcp,我在socket和websocket之间搭建了一座桥梁,可以从机器上获取数据并在浏览器上显示。但这些数据是原始数据,需要进行解析。我能够解析它直到数组对象,但并没有进一步的成功。无论我做什么,它都会作为一个对象返回。 以下是来自套接字的初始原始数据:

received: 2018-08-13T16:43:34.0689|power|ON|mode|MANUAL|execution|READY|Xact|0.00|Yact|0.00|Zact|0.00|Xcom|0.00|Ycom|0.00|Zcom|0.00|path_feedrate|0.00|line|0|Block|0|program|O-Logo.ord

received: 2018-08-13T16:43:34.0689|comms|NORMAL||||
2018-08-13T16:43:34.0689|Sspeed|0.00
然后,我删除了时间戳,并通过执行以下操作将其转换为数组:

socket.on('data', function (data) {
    var machineData = data.split("|");
    var arrData = machineData.slice(1);
    console.log("received: " + arrData);
    document.getElementById("data").innerHTML = ("Received: " + arrData);
});
我明白了:

received: power,ON,mode,MANUAL,execution,READY,Xact,0.00,Yact,0.00,Zact,0.00,Xcom,0.00,Ycom,0.00,Zcom,0.00,path_feedrate,0.00,line,0,Block,0,program,O-Logo.ord

received: comms,NORMAL,,,,
2018-08-13T16:47:40.0978,Sspeed,0.00
不幸的是,我无法进一步解析它,我尝试了这么多方法,得到的只是Object:Object。我希望这些数据是键:值对,比如

power:ON
mode: MANUAL
execution: READY 
等等,没有任何时间戳。这些数据是动态的,并且会随着机器的工作而变化。我尝试了这里和那里发布的大多数方法,但它总是只返回没有数据的对象。请帮帮我

试试这个:

var str=“电源开启模式手动执行就绪Xact 0.00 Yact 0.00 Zact 0.00 Xcom 0.00 Ycom 0.00 Zcom 0.00路径进给速度0.00线路块0.00程序标识”;
var arr=str.split(“|”);
var obj={}
arr.map((o,i)=>{
如果((i+1)%2!=0)obj[o]=arr[i+1];
})

console.log(obj)
这是一个经典场景,用于将字符串转换为平面数组,并使用reduce构建obj,只需跳过每2项

const str=“power | ON | mode | MANUAL | execution | READY | Xact | 0.00 | Yact | 0.00 | Xcom | 0.00 | Zcom | 0.00 | path | u feedrate | 0.00 | line | Block | 0 | Logo |”;
const arr=str.split(“|”);
const obj=arr.reduce((acc、current、i、original)=>{
如果(i%2==1){
acc[原始[i-1]]=当前;
}
返回acc;
}, {})

console.log(obj)
不幸的是,它不起作用,这是我从e.webtcp.sock.onmessage的socket.ondataCustom(socket\u client.html:59)和socket.WebTCPIO.onEvent(webtcp-0.0.1.min.js:1356)得到的结果(webtcp-0.0.1.min.js:1339)在e.p.dispatchEvent(webtcp-0.0.1.min.js:172)在e.p.dispatchMessage(webtcp-0.0.1.min.js:694)在e.p.dispatchMessage(webtcp-0.0.1.min.js:722)在WebSocket.f.ws.onmessage(webtcp-0.0.1.min.js:780)这是我每次都会得到的。我尝试了很多方法,得到的都是:received:[对象]是的,我试了两个他们。控制台。日志(数据)日志(数据)我得到的只是字符串数据:2018-08-13T18:18:09:07:07:07:07:07:07:60“电力|上电|上电,上电,上电,上电,上电,上电,上电,下电,上电,上电,上电,上电,模式,下电,下电,模式,手动,执行,执行,准备,准备,准备,准备,准备,准备,准备,下电,下电,下电,下电,执行,执行,准备,准备,下电,下电,下电,下电,下电,下电,下电,准备,下电,下电,下电,下电,下电,下电,准备,下电,下电,下电,下电,下电,下电,下电,下电,准备,下电,下电,下电,下电,下电,下电,准备,正如您所看到的,我添加了JSON.stringify,但结果被再次解析为received:[object]。这太奇怪了。我可以字符串化,我可以。拆分和。切片,但我不能让它成为键值对…@Asyl如果你能够拆分和切片你正在解析结果,可能错误在其他地方,与这个地方无关,第59行在哪里?我只是得到这个:[对象]。为什么它没有将string对象解析为我所尝试的任何内容…谢谢。我修复了我的错误。它是在使用StringOutputing时。我如何将其输出到html?您只需在对象上使用
JSON.stringify
,它将返回给u一个字符串,您可以将其放入html中。
document.getElementById('element-id')).innerText=JSON.stringify(obj);