สตรีมข้อมูล JSON แบบสดด้วย javascript

ฉันต้องการสตรีมข้อมูล telemetry แบบสดที่จัดรูปแบบใน JSON จาก websocket ไปยังเบราว์เซอร์โดยใช้ javascript websocket ถูกสร้างขึ้นบนเซิร์ฟเวอร์ X.X.X.X โดยใช้ Native c และ wrapper websocketd บนพอร์ต 8080 ไคลเอนต์ (IP: Y.Y.Y.Y.Y) จะเชื่อมต่อกับเซิร์ฟเวอร์เดียวกันผ่าน https บนพอร์ต 80 (https://X.X.X.X:80) และจะได้รับโค้ด javascript ซึ่งบอกให้ดึงข้อมูลสตรีมสดจาก websocket (ws://X.X.X.X:8080) และรีเฟรชค่าบางค่าใน เว็บไซต์ที่มีค่าจากสตรีมนี้

ข้อมูลสามารถมีลักษณะเช่นนี้ได้อย่างชัดเจน:

{
        "name of system": {
                "RSSI": {
                        "rssi": "0",
                        "adc1": "0.00",
                        "adc2": "0.00",
                        "rxBatt": "0.00",
                        "swr": "0"
                },
                "ASS": {
                        "airspeed": "0.00"
                }
        }
}
{...}
and so on...

เฟรมนี้จะต้องทำซ้ำเช่น ในช่วงเวลา 500 มิลลิวินาที และถูกส่งโดยไม่มีช่องว่างหรืออักขระขึ้นบรรทัดใหม่

ฉันพยายามแยกวิเคราะห์สิ่งนี้แล้วด้วย JSON.parse() แต่คอนโซลเบราว์เซอร์ของฉันส่งคืนข้อผิดพลาดต่อไปนี้: "Uncaught SyntaxError: Unexpected token *" หรือ "Unexpected token {" นี่เป็นเพราะโค้ด JSON ที่ใช้งานไม่ถูกต้อง แม้ว่าฉันจะตรวจสอบหลายครั้งแล้วใช่หรือไม่

คำถามของฉันคือตอนนี้: JSON.parse สามารถถ่ายทอดสดได้จริงหรือไม่ ถ้าไม่ มีห้องสมุดใดบ้างหรือฉันควรเลือกใช้โซลูชันใหม่ทั้งหมดหรือไม่

ขอแสดงความนับถืออย่างสูง


person T.B.    schedule 11.02.2019    source แหล่งที่มา
comment
สงสัยว่ามีอะไรเกี่ยวข้องกับ JSON.parse ฉันเดาว่าผลลัพธ์มีอักขระที่ไม่ถูกต้อง และเนื่องจากคุณไม่แสดงโค้ดเลย จึงเป็นเรื่องยากที่จะให้คำแนะนำในการแก้ไขข้อบกพร่อง   -  person epascarello    schedule 12.02.2019
comment
ส่งสตริง JSON ที่ถูกต้องในรูปแบบของอาร์เรย์แบบแบน หรือสตรีมUint8Arraysและอ่านสตรีมอย่างต่อเนื่อง ปัญหาอยู่ที่โครงสร้างข้อมูล และวิธีอ่านสตรีม ไม่ใช่กระบวนการสตรีม   -  person guest271314    schedule 12.02.2019
comment
กิจวัตรของฉันค่อนข้างง่าย: webSocket.onmessage = function(event){ stats = event.data; data = JSON.parse(event.data); คุณช่วยยกตัวอย่างโค้ดของอาเรย์แบบแบนได้ไหม ตอนนี้ฉันกำลังสตรีมข้อมูล ASCII ผ่าน websocket ฉันเดาว่านั่นคือปัญหาใช่ไหม   -  person T.B.    schedule 12.02.2019
comment
ข้อมูลถูกส่งไปยังลูกค้าในรูปแบบใด? เป็นสตริง JSON ที่ถูกต้องใช่ไหม เหตุใดโครงสร้างข้อมูลวัตถุธรรมดา JavaScript จึงจำเป็น ค่าต่างๆ สามารถสตรีมได้ในขนาดคงที่ สตรีมการแปลงสามารถไพพ์การเขียน (เซิร์ฟเวอร์) ไปยังไคลเอนต์ (อ่าน)   -  person guest271314    schedule 12.02.2019
comment
ฉันใช้โครงสร้างออปเจ็กต์เนื่องจากฉันต้องการสตรีมข้อมูลจากระบบที่หลากหลายซึ่งมีชื่ออื่นและเซ็นเซอร์อื่น ๆ (เช่น RSSI) ฉันต้องกำหนดค่าเซ็นเซอร์เหล่านี้ให้กับระบบประเภทใดประเภทหนึ่งโดยเฉพาะ   -  person T.B.    schedule 12.02.2019
comment
แต่ละส่วนของสตรีมแบบแยกอาจมี เช่น ['0','0.00','0.00','0.00','0','0.00'] อ่านและประมวลผลองค์ประกอบ 6 หรือ N›0-6 ของสตรีมแบบอะซิงโครนัสในแต่ละครั้งเป็นอนุกรมหรือแบบขนาน ทำสิ่งต่าง ๆ หลังจากที่แต่ละองค์ประกอบ 6 อ่าน   -  person guest271314    schedule 12.02.2019
comment
ขอบคุณสำหรับลิงค์ ฉันจะตรวจสอบพวกเขาและดูว่าฉันสามารถหาแนวคิดในการแก้ปัญหาของฉันได้หรือไม่ ในโปรเจ็กต์นี้ ฉันใช้ JavaScript เป็นครั้งแรก ซึ่งทำให้ฉันต้องเผชิญกับปัญหาที่ดูเหมือนซ้ำซาก   -  person T.B.    schedule 12.02.2019
comment
console.log(typeof event.data, event.data instanceof ArrayBuffer, event.data instanceof Blob, new TextDecoder().decode(new Uint8Array(event.data))) พิมพ์อะไร?   -  person guest271314    schedule 12.02.2019
comment
Web Sockets มีการจัดกรอบข้อความของคุณโดยอัตโนมัติ ไม่จำเป็นต้องบัฟเฟอร์และแยกส่วนเริ่มต้น/สิ้นสุดของข้อความ คุณกำลังทำอะไรผิดแต่ไม่ได้แสดงโค้ดใดๆ ของคุณให้เราดู ดังนั้นฉันจึงไม่รู้ว่าคุณคาดหวังให้เราช่วยคุณแก้ไขข้อบกพร่องได้อย่างไร นอกจากนี้ ให้พิจารณาใช้เหตุการณ์ที่เซิร์ฟเวอร์ส่งสำหรับสิ่งนี้ เนื่องจากข้อมูลของคุณไปเพียงทางเดียวเท่านั้น ด้วยวิธีนี้ คุณจะมีการเชื่อมต่อใหม่โดยอัตโนมัติ มี API ที่เรียบง่ายกว่า และวิธีมาตรฐานในการดำเนินการต่อจากจุดที่คุณค้างไว้ในการเชื่อมต่อใหม่   -  person Brad    schedule 12.02.2019


คำตอบ (1)


หากตัวแยกวิเคราะห์ JSON พบเครื่องหมายดอกจันตามที่แนะนำโดย Unexpected token * แสดงว่า JSON ของคุณมีรูปแบบไม่ถูกต้อง เนื่องจากนั่นไม่ใช่อักขระที่ถูกต้องใน JSON (อยู่นอกสตริง)

ฉันขอแนะนำให้ตรวจสอบข้อความที่ได้รับและตรวจสอบด้วยสายตาว่าเป็น JSON ที่ถูกต้อง สิ่งที่ต้องการ:

webSocket.onmessage = function(event) {
    console.log(event.data);
}

จากนั้น คุณสามารถตรวจสอบคอนโซลนักพัฒนาซอฟต์แวร์ของเบราว์เซอร์ของคุณ (โดยปกติคือ Cmd-Shift-I บน Mac หรือ F12 ที่อื่น) เพื่อดูว่าคุณได้รับอะไรจริงๆ

person Ben Blank    schedule 11.02.2019