javascript检查JSON键是否存在并显示值

javascript检查JSON键是否存在并显示值,javascript,json,Javascript,Json,我最近一直在修补Z-Wave,我正在尝试制作一个页面来包含/排除他们的产品。但进展不太顺利。我试图检查JSON键是否存在,然后在页面上显示它。我明白了 TypeError:data.controller未定义 代码如下: window.setInterval(function(){ getData(); }, 2000); function getData() { var milliseconds = (new Date).getTime(); var time = millisecon

我最近一直在修补Z-Wave,我正在尝试制作一个页面来包含/排除他们的产品。但进展不太顺利。我试图检查JSON键是否存在,然后在页面上显示它。我明白了

TypeError:data.controller未定义

代码如下:

window.setInterval(function(){
   getData();
}, 2000);

function getData()
{
var milliseconds = (new Date).getTime();
var time = milliseconds.toString().substr(0, milliseconds.toString().length - 3) ;

$.postJSON( "http://192.168.1.102:8083/ZWaveAPI/Data/" + time, function( data ) {
    if(data.controller.lastExcludedDevice.value) alert("EXCLUDED SOMETHING");
    if(data.controller.lastIncludedDevice.value) alert("INCLUDED SOMETHING");
});   
}

$.postJSON = function(url, data, callback, sync) {

// shift arguments if data argument was omited
if ( jQuery.isFunction( data ) ) {
    sync = sync || callback;
    callback = data;
    data = {};
};
$.ajax({
    type: 'POST',
    url: url,
    data: data,
    dataType: 'json',
    success: callback,
    error: callback,
    async: (sync!=true)
});
};
Json:

{
  "controller.data.controllerState": {
    "value": 0,
    "type": "int",
    "invalidateTime": 1424781697,
    "updateTime": 1425338938
  },
  "controller.data.lastIncludedDevice": {
    "value": 42,
    "type": "int",
    "invalidateTime": 1424781697,
    "updateTime": 1425338938
  },
  ......
非常感谢您的帮助

试试这个:

if(data.controller && 
    data.controller.lastExcludedDevice.value) 
    alert("EXCLUDED SOMETHING");
可以这样想:
console.log({}.x)
打印“未定义”。
console.log({}.x.y)
抛出一个错误。允许您使用
未定义的
,但如果您试图访问它的属性,它会抛出一个错误

使用
&&
的短路属性加快检查:

if(a && a.b && a.b.c && a.b.c.d) {
    console.log("Not an error to print", a.b.c.d);
}{

如果点是键的一部分,则需要使用
[]
符号

比如说

if (data['controller.data.controllerState'].value) ...


键实际上是
controller.data.lastIncludedDevice
。我建议阅读。阅读有关对象的教程可能也有帮助:考虑使用<代码> PARSETIN(DATE .No())1000, 10,以秒为单位获取时间戳
if (data['controller.data.lastIncludedDevice'].value) ...