gpt4 book ai didi

javascript - 检查 JSON 键/节点是否存在

转载 作者:可可西里 更新时间:2023-11-01 01:32:49 26 4
gpt4 key购买 nike

我正在使用 Google Map API 从邮政编码查找中检索城市 + 州/地区信息。问题在于,在某些情况下,邮政编码查找不会检索到城市名称。例如 92625(美国)。

var g = new GClientGeocoder();
g.setBaseCountryCode('US');
g.getLocations('92625', function(response){
if (response) {
var place = response.Placemark[0];
var state = place.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
var city = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
GLog.write("City = "+city+" : State/Region = "+state+" : Country = " + g.getBaseCountryCode());
}
});

在某些情况下,如上所述,结果中不会有城市名称,因此城市会出现未定义的错误,因为键 Locality 不存在。此错误会阻止脚本的其余部分运行。

我能够通过...补救它

    if (place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality != null)
var city = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
else
var city = '';

...但这让我对其他键的类似错误感到疑惑。例如:如果 AdministrativeArea 未定义,上述 IF 语句也会导致未定义的错误。那么我应该检查是否每个键/节点都存在吗?似乎是一种困惑的方法,因为其中一些键的深度超过 5 层...是否有更简单的方法来解决这个问题,也许是一些我不熟悉的 JQuery 方法?

最佳答案

或者,您可以创建一个函数,为您提供默认值:

function valueOrDefault(val, def) {
if (def == undefined) def = "";
return val == undefined ? def : val;
}

然后像这样使用它:

var place = response.Placemark[0];
var state = valueOrDefault(place.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName);
var city = valueOrDefault(place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName);

就我个人而言,我认为它比 p00ya 的提议更好写,尽管它在 undefined object 中摆弄有点笨拙……也许可以将其更改为:

function drill(p, a) {
a = a.split(".");//add this
for (i in a) {
var key = a[i];
if (p[key] == null)
return '';
p = p[key];
}
return p;
}
var obj = {foo:{bar:{baz:"quux"}}};
var s = drill(obj, "foo.bar.baz"));//and you can use a simple property chain

关于javascript - 检查 JSON 键/节点是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1129209/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com