【问题标题】:JScript JSON Object CheckJScript JSON 对象检查
【发布时间】:2010-05-04 15:15:08
【问题描述】:

我正在尝试检查 json[0]['DATA']['name'][0]['DATA']['first_0'] 在某些情况下是否存在 json[0][' DATA']['name'] 不包含任何内容。

我可以检查 json[0]['DATA']['name'] 使用

if (json[0]['DATA']['name'] == '') {
    // DOES NOT EXIST
}

然而

if (json[0]['DATA']['name'][0]['DATA']['first_0'] == '' || json[0]['DATA']['name'][0]['DATA']['first_0'] == 'undefined') {
    // DOES NOT EXIST
}

返回 json[0]['DATA']['name'][0]['DATA'] 为 null 或不是对象。我理解这是因为在这种情况下数组 'name' 不包含任何内容,但在其他情况下 first_0 确实存在并且 json[0]['DATA']['name'] 确实返回了一个值。

有没有一种方法可以直接检查 json[0]['DATA']['name'][0]['DATA']['first_0'] 而无需执行以下操作?

if (json[0]['DATA']['name'] == '') {
    if (json[0]['DATA']['name'][0]['DATA']['first_0'] != 'undefined') {
    // OBJECT EXISTS
    }
}

【问题讨论】:

    标签: json object javascript


    【解决方案1】:

    要检查是否设置了属性,您可以说

    if (json[0]['DATA']['name']) {
      ...
    }
    

    除非该对象明确可以包含0(零)或''(空字符串),因为它们的计算结果也为false。在这种情况下,您需要明确检查 undefined

    if (typeof(json[0]['DATA']['name']) !== "undefined") {
      ...
    }
    

    如果你有几个这样的对象属性链引用一个实用函数,例如:

    function readProperty(json, properties) {
      // Breaks if properties isn't an array of at least 1 item
      if (properties.length == 1)
        return json[properties[0]];
      else {
        var property = properties.shift();
        if (typeof(json[property]) !== "undefined")
          return readProperty(json[property], properties);
        else
          return; // returns undefined
      }
    }
    
    var myValue = readProperty(json, [0, 'DATA', 'name', 0, 'DATA', 'first_0']);
    if (typeof(myValue) !== 'undefined') {
      // Do something with myValue
    }
    

    【讨论】:

      【解决方案2】:

      所以您问是否必须检查孩子是否存在而父母可能不存在?不,我不相信你能做到。

      编辑:所以这不是完全的损失,所有括号是什么?

      json[0]['DATA']['name'][0]['DATA']['first_0']
      

      可能是

      json[0].DATA.name[0].DATA.first_0
      

      对吗?

      【讨论】:

      • 是的,这就是我要问的。谢谢。
      猜你喜欢
      • 2017-08-11
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      相关资源
      最近更新 更多