Javascript 给定一个JSON对象数组,如何基于嵌套值获取JSON对象X?

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"

根据地址,我使用获取以下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"
                    ]
                }
            ]
        }
    ]
}
问题: 如何根据特定类型获取
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);
}