繁体   English   中英

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

[英]Given an array of JSON objects, how can I get JSON object X based on a nested value?

我正在使用google maps地理编码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"
                    ]
                }
            ]
        }
    ]
}

我怎样才能获得long_nameshort_name中对象的address_components阵列基于特定类型的?

我想获得long_name short_name那些有对象的"locality"在他们的types数组。

上下文

我正在使用此信息使用node.js,express和mongodb构建“公寓查找器”应用程序。

注意事项

我已经读到下划线库对此很有用。

编辑:我的想法

因此,我有一个想法如何搜索address_components数组。 (我可以访问它results[0]我相信我可以访问types由点号数组,但我想通过所有的搜索types每个对象的数组和返回时,我找到一个对象,让我们说, types包含“位置”。 我怎样才能做到这一点?

我不是经验丰富的解析/循环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);

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

如果您想使用下划线,这是一个解决方案,它将向您展示如何使用其下划线来获得您想要的结果

这将查找具有“位置”类型的第一个组件

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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM