簡體   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