给定一个JSON对象数组,我怎样才能得到基于嵌套值的JSON对象?

我正在使用谷歌地图geocoding API获取以下JSON对象,基于一个地址:

{ "results":[ { "address_components":[ { "long_name":"643", "short_name":"643", "types":[ "subpremise" ] }, { "long_name":"900", "short_name":"900", "types":[ "street_number" ] }, { "long_name":"Folsom Street", "short_name":"Folsom St", "types":[ "route" ] }, { "long_name":"South of Market", "short_name":"South of Market", "types":[ "neighborhood", "political" ] }, { "long_name":"San Francisco", "short_name":"SF", "types":[ "locality", "political" ] }, { "long_name":"San Francisco County", "short_name":"San Francisco County", "types":[ "administrative_area_level_2", "political" ] }, { "long_name":"California", "short_name":"CA", "types":[ "administrative_area_level_1", "political" ] }, { "long_name":"United States", "short_name":"US", "types":[ "country", "political" ] }, { "long_name":"94107", "short_name":"94107", "types":[ "postal_code" ] }, { "long_name":"1007", "short_name":"1007", "types":[ "postal_code_suffix" ] } ] } ] } 

如何根据特定的types获取address_components数组中对象的long_namelong_name

我想获取那些在其types数组中具有"locality"对象的long_name long_name

上下文

我正在使用这些信息来构build一个使用node.js,express和mongodb的“公寓search器”应用程序。

注意事项

我读过下划线库对此很有帮助。

编辑:我的想法

所以,我有一个想法如何searchaddress_components数组。 (我可以通过results[0]访问它),我相信我可以通过点符号来访问types数组,但是我想search每个对象的所有types数组,然后返回find一个对象,比方说types包含“位置”。 我怎样才能做到这一点?

我不是经验丰富的parsing/循环JSON。 我正在学。 任何帮助是极大的赞赏。 谢谢!

您可以使用嵌套的.filter来获取包含该对象的对象,并结合使用.map来创build一个匹配对象数组:

 var objectsContainingConditions = data.results[0].address_components.filter(function(item) { return item.types.filter(function(addressType) { return addressType == "locality"; }).length > 0; }).map(function(item) { return { long: item.long_name, short: item.short_name } }); 

把它放到一个函数中,并且如果你想重用它,传递types:

 function queryGoogleComponentsByType(type, components) { return components.filter(function(item) { return item.types.filter(function(addressType) { return addressType == type; }).length > 0; }).map(function(item) { return { long: item.long_name, short: item.short_name } }); } var results = queryGoogleComponentsByType("locality", data.results[0].address_components); 

演示: http : //jsfiddle.net/upzjth30/

如果你想使用下划线,这里是一个解决scheme,将告诉你如何使用它的基元来实现你正在寻找的结果

这将查找具有“局部性”types的第一个组件

 var result = _.chain(json.results) .pluck('address_components') .flatten() .find(function(component) { return _.contains(component.types, 'locality'); }) .pick('long_name', 'short_name') .value() 

演示: https : //jsfiddle.net/x9520bkx/

 for (var i = 0; i < data.results[0].address_components.length; i++) { alert(data.results[0].address_components[i].short_name); }