You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GraphQL查询:如何返回缺失字段为None并明确odds类型?

问题:GraphQL查询中区分不同类型的赔率并返回缺失值

我的GraphQL查询如下:

query Odds($id: ID!) {
    odds(id: $id) {
        oddsMarkets {
            oddsOptions {
                ... on OddsToWin {
                    odds
                }
                ... on OddsFinishes {
                    odds
                }
                ... on OddsCutsPlayers {
                    odds
                }
                ... on OddsLeadersPlayers {
                    odds
                }
            }
        }
    }
}

当前返回的结果示例:

{
  "odds": {
    "oddsMarkets": [
      {
        "oddsOptions": [
          {
            "odds": "+1200"
          }
        ]
      }
    ]
  }
}

现在的问题是:无法判断返回的odds对应哪种类型(获胜、完赛、晋级还是领先),而且缺失的类型不会返回对应字段。想知道怎么能明确赔率的类型归属,或者让所有期望的字段都返回(缺失值用null/None填充)。


解决方案

方法1:通过__typename明确类型归属

GraphQL自带__typename元字段,能直接返回当前对象的具体类型。修改查询,在每个内联片段中加入这个字段,就能直观区分每个赔率对应的类型:

query Odds($id: ID!) {
    odds(id: $id) {
        oddsMarkets {
            oddsOptions {
                ... on OddsToWin {
                    __typename
                    odds
                }
                ... on OddsFinishes {
                    __typename
                    odds
                }
                ... on OddsCutsPlayers {
                    __typename
                    odds
                }
                ... on OddsLeadersPlayers {
                    __typename
                    odds
                }
            }
        }
    }
}

返回结果会变成这样:

{
  "odds": {
    "oddsMarkets": [
      {
        "oddsOptions": [
          {
            "__typename": "OddsToWin",
            "odds": "+1200"
          }
        ]
      }
    ]
  }
}

通过__typename字段就能直接判断当前赔率的类型,无需提前调研。

方法2:用别名区分不同类型的赔率,强制返回所有字段

如果希望不管类型是否存在,都返回所有期望的字段(缺失值为null),可以给每个类型的odds字段设置不同的别名,确保每个类型对应的键都会出现在结果中:

query Odds($id: ID!) {
    odds(id: $id) {
        oddsMarkets {
            oddsOptions {
                ... on OddsToWin {
                    winOdds: odds
                }
                ... on OddsFinishes {
                    finishOdds: odds
                }
                ... on OddsCutsPlayers {
                    cutOdds: odds
                }
                ... on OddsLeadersPlayers {
                    leaderOdds: odds
                }
            }
        }
    }
}

返回结果会包含所有别名对应的键,不存在的类型对应的字段会返回null:

{
  "odds": {
    "oddsMarkets": [
      {
        "oddsOptions": [
          {
            "winOdds": "+1200",
            "finishOdds": null,
            "cutOdds": null,
            "leaderOdds": null
          }
        ]
      }
    ]
  }
}

这样就能一目了然看到所有类型的赔率状态,缺失的类型会明确显示为null。


内容的提问来源于stack exchange,提问作者HJA24

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 22:57:20