簡體   English   中英

如何使用 JavaScript 訪問嵌套 graphql 響應的不同級別?

[英]How to access different levels of a nested graphql response using JavaScript?

我有一個看起來像這樣的 graphql 響應:

{
    ethereum: {
        address: [{
            address: "0x980c55e501d2fad60b5702e2fd88232137e12145",
            balances: [{
                currency: {
                    address: "0x2a9718deff471f3bb91fa0eceab14154f150a385",
                    name: "ElonGate"
                }
            }, {
                currency: {
                    address: "0xad90c05bc51672eedfee36e58b3ff1a78bbc146d",
                    name: "XSPACE"
                }
            }, {
                currency: {
                    address: "0x33a3d962955a3862c8093d1273344719f03ca17c",
                    name: "SporeFinance"
                }
            }, {
                currency: {
                    address: "0x85102c0062aa918cb9e26d94a284aafca602df13",
                    name: "Avalon Protocol"
                }
            }, {
                currency: {
                    address: "0x07af67b392b7a202fad8e0fbc64c34f33102165b",
                    name: "Aquagoat"
                }
            }, {
                currency: {
                    address: "0x31045e7023e6c388f9447e632a3f9eaff90393fa",
                    name: "Safe Token"
                }
            }, {
                currency: {
                    address: "-",
                    name: "Binance Smart Chain Native Token"
                }
            }, {
                currency: {
                    address: "0x2222227e22102fe3322098e4cbfe18cfebd57c95",
                    name: "Alien Worlds Trilium"
                }
            }, {
                currency: {
                    address: "0xdf6d9fc61bd8163b59d6381ec93ae1d3a4d95bb2",
                    name: "BlimpsRock"
                }
            }, {
                currency: {
                    address: "0x2e291e1c9f85a86d0c58ae15621aac005a8b2ead",
                    name: "Zeppelin.dao"
                }
            }, {
                currency: {
                    address: "0x6b51231c43b1604815313801db5e9e614914d6e4",
                    name: "SafeGalaxy"
                }
            }, {
                currency: {
                    address: "0x8076c74c5e3f5852037f31ff0093eeb8c8add8d3",
                    name: "SafeMoon"
                }
            }, {
                currency: {
                    address: "0xdbaaa36b347d56b77ce0e36f050fceebbf9fbc38",
                    name: "SavePlanetEarth"
                }
            }, {
                currency: {
                    address: "0x3ad9594151886ce8538c1ff615efa2385a8c3a88",
                    name: "SafeMars"
                }
            }, {
                currency: {
                    address: "0xf7844cb890f4c339c497aeab599abdc3c874b67a",
                    name: "NFTArt.Finance"
                }
            }, {
                currency: {
                    address: "0xa57ac35ce91ee92caefaa8dc04140c8e232c2e50",
                    name: "Pitbull"
                }
            }]
        }]
    }
}

我需要訪問貨幣下的所有地址字段。

使用這個:

var x = body.data.ethereum.address[0].balances

我可以把它降低到貨幣水平:

[{
    currency: {
        address: "0x2a9718deff471f3bb91fa0eceab14154f150a385",
        name: "ElonGate"
    }
}, {
    currency: {
        address: "0xad90c05bc51672eedfee36e58b3ff1a78bbc146d",
        name: "XSPACE"
    }
}, {
    currency: {
        address: "0x33a3d962955a3862c8093d1273344719f03ca17c",
        name: "SporeFinance"
    }
}, {
    currency: {
        address: "0x85102c0062aa918cb9e26d94a284aafca602df13",
        name: "Avalon Protocol"
    }
}, {
    currency: {
        address: "0x07af67b392b7a202fad8e0fbc64c34f33102165b",
        name: "Aquagoat"
    }
}, {
    currency: {
        address: "0x31045e7023e6c388f9447e632a3f9eaff90393fa",
        name: "Safe Token"
    }
}, {
    currency: {
        address: "-",
        name: "Binance Smart Chain Native Token"
    }
}, {
    currency: {
        address: "0x2222227e22102fe3322098e4cbfe18cfebd57c95",
        name: "Alien Worlds Trilium"
    }
}, {
    currency: {
        address: "0xdf6d9fc61bd8163b59d6381ec93ae1d3a4d95bb2",
        name: "BlimpsRock"
    }
}, {
    currency: {
        address: "0x2e291e1c9f85a86d0c58ae15621aac005a8b2ead",
        name: "Zeppelin.dao"
    }
}, {
    currency: {
        address: "0x6b51231c43b1604815313801db5e9e614914d6e4",
        name: "SafeGalaxy"
    }
}, {
    currency: {
        address: "0x8076c74c5e3f5852037f31ff0093eeb8c8add8d3",
        name: "SafeMoon"
    }
}, {
    currency: {
        address: "0xdbaaa36b347d56b77ce0e36f050fceebbf9fbc38",
        name: "SavePlanetEarth"
    }
}, {
    currency: {
        address: "0x3ad9594151886ce8538c1ff615efa2385a8c3a88",
        name: "SafeMars"
    }
}, {
    currency: {
        address: "0xf7844cb890f4c339c497aeab599abdc3c874b67a",
        name: "NFTArt.Finance"
    }
}, {
    currency: {
        address: "0xa57ac35ce91ee92caefaa8dc04140c8e232c2e50",
        name: "Pitbull"
    }
}]

但是從這里我無法訪問所有的地址字段。 我可以使用以下方法訪問第一個地址:

body.data.ethereum.address[0].balances[0].currency.address

但理想情況下,我需要獲取所有地址字段。

我在這里錯過了什么嗎?

由於body.data.ethereum.address[0].balances是一個對象數組body.data.ethereum.address[0].balances[0].currency.address只會訪問這些對象中的第一個。

您可以使用Array.map獲取所有地址:

 const input = { ethereum: { address: [{ address: "0x980c55e501d2fad60b5702e2fd88232137e12145", balances: [{ currency: { address: "0x2a9718deff471f3bb91fa0eceab14154f150a385", name: "ElonGate" } }, { currency: { address: "0xad90c05bc51672eedfee36e58b3ff1a78bbc146d", name: "XSPACE" } }, { currency: { address: "0x33a3d962955a3862c8093d1273344719f03ca17c", name: "SporeFinance" } }, { currency: { address: "0x85102c0062aa918cb9e26d94a284aafca602df13", name: "Avalon Protocol" } }, { currency: { address: "0x07af67b392b7a202fad8e0fbc64c34f33102165b", name: "Aquagoat" } }, { currency: { address: "0x31045e7023e6c388f9447e632a3f9eaff90393fa", name: "Safe Token" } }, { currency: { address: "-", name: "Binance Smart Chain Native Token" } }, { currency: { address: "0x2222227e22102fe3322098e4cbfe18cfebd57c95", name: "Alien Worlds Trilium" } }, { currency: { address: "0xdf6d9fc61bd8163b59d6381ec93ae1d3a4d95bb2", name: "BlimpsRock" } }, { currency: { address: "0x2e291e1c9f85a86d0c58ae15621aac005a8b2ead", name: "Zeppelin.dao" } }, { currency: { address: "0x6b51231c43b1604815313801db5e9e614914d6e4", name: "SafeGalaxy" } }, { currency: { address: "0x8076c74c5e3f5852037f31ff0093eeb8c8add8d3", name: "SafeMoon" } }, { currency: { address: "0xdbaaa36b347d56b77ce0e36f050fceebbf9fbc38", name: "SavePlanetEarth" } }, { currency: { address: "0x3ad9594151886ce8538c1ff615efa2385a8c3a88", name: "SafeMars" } }, { currency: { address: "0xf7844cb890f4c339c497aeab599abdc3c874b67a", name: "NFTArt.Finance" } }, { currency: { address: "0xa57ac35ce91ee92caefaa8dc04140c8e232c2e50", name: "Pitbull" } }] }] } }; const addresses = input.ethereum.address[0].balances.map(x => x.currency.address); console.log(addresses);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM