2017-06-09 2 views
-1

Ich erhalte von WebSocket Material wie folgt aus:Wie analysiere ich diese Daten?

{"sensorValue":{"id":5168,"roadStationId":23401,"name":"OHITUKSET_5MIN_LIUKUVA_SUUNTA2_MS2","oldName":"ohitukset_5min_liukuva_suunta2_MS2","shortName":"MTila2","sensorValue":69,"sensorUnit":"***"}} 
{"sensorValue":{"id":5125,"roadStationId":23401,"name":"KESKINOPEUS_5MIN_LIUKUVA_SUUNTA2","oldName":"averageSpeed2","shortName":"km/h2","sensorValue":83,"sensorUnit":"km/h"}} 

Was ich tun möchte, ist, die Werte des Namens und der Sensorvalue zu bekommen. Bisher habe ich Code wie folgt:

function connect() { 
    var url = "ws://..."; 
    var socket = new WebSocket(url); 
    socket.onopen = function (event) { 
     console.info('Socket is open'); 
    } 
    socket.onmessage = function(message) { 
     addMessage(message); 
    }; 
} 


function addMessage(message) { 
    var myJSON = JSON.stringify(message.data); 
    var obj = JSON.parse(myJSON); 
    document.getElementById("sensorValue").innerHTML = obj.sensorValue; 
} 

Nun, was immer ich tue ich diese:

uncaught TypeError: Cannot set property 'innerHTML' of null".

Ich habe versucht, mehrere Web-Tutorials von getElementryById und sie funktionieren gut.

Warum erhalte ich diesen Fehler?

+1

Haben Sie ein Element in Ihrem HTML mit der ID sensorValue? – danielspaniol

+1

Erstens: Der Aufruf von 'JSON.parse' direkt nach' JSON.stringify' ist nicht notwendig. Rufen Sie einfach nicht 'JSON.stringify' an erster Stelle auf. Zweitens bedeutet dieser Fehler, dass das Element mit der ID 'sensorValue' nicht existiert. Stellen Sie sicher, dass es existiert (entweder indem Sie es erstellen oder indem Sie das übergebene Argument korrigieren). Der Fehler hat nichts mit dem * Analysieren * der Daten zu tun (was Sie sowieso nicht tun müssen, wenn Sie nicht serialisieren). –

Antwort

1

Ich glaube, Sie mischen 2 Dinge zusammen:

  1. Sie Ihre Antwortdaten im JSON-Format haben und Sie wollen daraus einen bestimmten Wert zu lesen. Sie tun dies, indem Sie das benötigte Feld mit dem Punktoperator referenzieren. document.getElementById("sensorValue").innerHTML=value_to_display: Für Ex: mit object.fieldName; (in Ihrem Fall obj.sensorValue)

  2. Sie in Ihrer HTML-Seite einen bestimmten Wert anzuzeigen. Damit dies funktioniert, benötigen Sie ein HTML-Element mit der ID "sensorValue". Der Fehler, den Sie bekommen, sagt Ihnen, dass es kein solches Element gibt. Zum Beispiel könnten Sie eine <div id="sensorValue"></div> zu Ihrer Seite hinzufügen.

+1

Nit: Sie können nicht auf Daten im "JSON-Format" mit Punktnotation zugreifen. JSON ist * Text *. Es muss zuerst geparst werden, um es in ein JavaScript-Objekt zu verwandeln, zu welchem ​​Zeitpunkt es nicht mehr JSON ist. Es scheint, als hätte das OP nur ein Objekt. Es gibt keine Notwendigkeit für "JSON.stringify" oder "JSON.parse". –