Javascript 给定一个JSON对象数组,如何基于嵌套值获取JSON对象X?
根据地址,我使用获取以下JSON对象:Javascript 给定一个JSON对象数组,如何基于嵌套值获取JSON对象X?,javascript,arrays,json,node.js,parsing,Javascript,Arrays,Json,Node.js,Parsing,根据地址,我使用获取以下JSON对象: { "results":[ { "address_components":[ { "long_name":"643", "short_name":"643", "types":[ "subpremise"
{
"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"
]
}
]
}
]
}
问题:
如何根据特定类型获取address\u components
数组中对象的long\u name
和short\u name
例子
我想获取在其类型
数组中具有“locality”
的对象的长\u名称
和短\u名称
上下文
我正在使用这些信息使用node.js、express和mongodb构建一个“公寓查找器”应用程序
考虑
我已经读到下划线库对此很有用
编辑:我的想法
因此,我知道如何搜索地址\u组件
数组。(我可以通过结果[0]
访问它),我相信我可以通过点符号访问类型
数组,但我想搜索每个对象的所有类型
数组,当我找到包含“位置”的类型的对象时返回。我该怎么做
我没有那么丰富的解析/循环JSON的经验。我在学习。非常感谢您的帮助。谢谢大家! 您可以使用嵌套的.filter
获取包含该对象的对象,并结合.map
创建匹配对象的数组:
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
}
});
如果要重用该类型,请将其放入函数并传递该类型:
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);
演示:如果您想使用下划线,下面是一个解决方案,它将向您展示如何使用其原语来实现您想要的结果
这将查找第一个具有“locality”类型的组件
var result = _.chain(json.results)
.pluck('address_components')
.flatten()
.find(function(component) {
return _.contains(component.types, 'locality');
})
.pick('long_name', 'short_name')
.value()
演示:for(var i=0;i
您使用什么编程/脚本语言来处理JSON?除此之外,您还使用过任何库或框架吗?你能告诉我们你已经得到了什么样的代码,并告诉我们它如何低于你想要实现的目标吗?我建议你看看@das-g,我正在用node.js开发它。我使用请求模块从google获取请求的数据(body),然后使用JSON.parse(body)进行解析。我已经读到下划线库可以很好地做到这一点,但我不确定如何做到这一点。我希望能够根据我选择的任何特定“类型”进行查询。@FelixKling我知道如何搜索address_components组件数组(我可以通过结果[0]访问它),我相信我可以通过点符号访问类型数组,但我希望搜索每个对象的所有类型,并在找到具有,比如说,类型有“位置”。我如何做到这一点?与我链接到的第二个问题中所解释的基本相同,例如,除了您不仅要与值进行比较,还要检查搜索词是否包含在类型
数组中。这可能也有帮助:这个答案缺少一个解释部分。我看到有非英语文本,由于编辑而被删除。应该有人翻译(如果值得的话)。
for (var i = 0; i < data.results[0].address_components.length; i++) {
alert(data.results[0].address_components[i].short_name);
}