2017-06-09 88 views
-1

我从WebSocket的材料收到这样:如何解析这些数据?

{"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"}} 

我想要做的是让名字和sensorValue的值。到目前为止,我有这样的代码:

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; 
} 

现在,无论我做什么,我得到这样的:getElementryById的

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

我尝试了好几种网络教程和他们工作得很好。

为什么我会收到此错误?

+1

你的HTML中有一个元素,其ID为sensorValue? – danielspaniol

+1

首先:在不需要'JSON.stringify'后直接调用'JSON.parse'。只是不要首先调用'JSON.stringify'。其次,该错误意味着ID为'sensorValue'的元素不存在。确保它确实存在(通过创建它或通过更正您传递的参数)。这个错误与*解析数据无关(如果你没有序列化,你不需要做任何事情)。 –

回答

1

我认为你是混合2把东西放在一起:

  1. 你有JSON格式的响应数据,你想从中读取一个特定的值。您可以通过使用点运算符来引用所需的字段来完成此操作。 对于例如:object.fieldName;(你的情况obj.sensorValue

  2. 你想在你的HTML页面可以显示特定的值使用: document.getElementById("sensorValue").innerHTML=value_to_display。 为了这个工作,你需要一个ID为“sensorValue”的HTML元素。你得到的错误告诉你,没有这样的元素。例如,您可以在页面上添加<div id="sensorValue"></div>

+1

Nit:您无法以点符号的方式以“JSON格式”访问数据。 JSON是*文本*。必须先解析它才能将其转换为JavaScript对象,此时它不再是JSON。看起来OP似乎只有一个对象。不需要'JSON.stringify'或'JSON.parse'。 –