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

如何通过GitHub GraphQL API读取Projects V2自定义字段值?

GitHub Projects V2 自定义字段查询方案

GitHub Projects V2的自定义字段数据并非直接关联在Issue对象上,必须通过Issue对应的**Project V2条目(projectV2Item)**才能获取到字段值。以下是可直接复用的查询方案:

1. 核心GraphQL查询语句

根据你的自定义字段类型(单选、文本、数字等),选择对应的字段片段:

query GetIssueWithCustomField($owner: String!, $repo: String!, $issueNumber: Int!, $projectNumber: Int!) {
  repository(owner: $owner, name: $repo) {
    issue(number: $issueNumber) {
      # 你原本需要的预定义字段
      title
      url
      assignees(first: 10) {
        nodes {
          login
        }
      }
      labels(first: 10) {
        nodes {
          name
        }
      }
      # 获取Issue关联的Project V2条目
      projectV2Items(first: 10) {
        nodes {
          project {
            number
            title
          }
          # 筛选指定名称的自定义字段(这里替换为你的MyCustomField)
          fieldValues(first: 10, query: "name:MyCustomField") {
            nodes {
              # 文本类型字段
              ... on ProjectV2ItemFieldTextValue {
                text
                field {
                  ... on ProjectV2TextField {
                    name
                  }
                }
              }
              # 单选类型字段
              ... on ProjectV2ItemFieldSingleSelectValue {
                name
                field {
                  ... on ProjectV2SingleSelectField {
                    name
                  }
                }
              }
              # 数字类型字段(如果需要)
              ... on ProjectV2ItemFieldNumberValue {
                number
                field {
                  ... on ProjectV2NumberField {
                    name
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

2. Windows PowerShell调用示例

将以下代码中的变量替换为你的实际信息:

# 替换为你的GitHub个人访问令牌(需包含repo和project权限)
$githubToken = "ghp_xxxxxxxxxxxxxxxxxxxx"
$headers = @{
  "Authorization" = "Bearer $githubToken"
  "Content-Type"  = "application/json"
}

# 定义查询语句
$query = @"
query GetIssueWithCustomField($owner: String!, $repo: String!, $issueNumber: Int!, $projectNumber: Int!) {
  repository(owner: $owner, name: $repo) {
    issue(number: $issueNumber) {
      title
      url
      assignees(first: 10) {
        nodes {
          login
        }
      }
      labels(first: 10) {
        nodes {
          name
        }
      }
      projectV2Items(first: 10) {
        nodes {
          project {
            number
            title
          }
          fieldValues(first: 10, query: "name:MyCustomField") {
            nodes {
              ... on ProjectV2ItemFieldTextValue {
                text
                field {
                  ... on ProjectV2TextField {
                    name
                  }
                }
              }
              ... on ProjectV2ItemFieldSingleSelectValue {
                name
                field {
                  ... on ProjectV2SingleSelectField {
                    name
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
"@

# 定义变量
$variables = @{
  owner         = "你的用户名/组织名"
  repo          = "目标仓库名"
  issueNumber   = 123  # 替换为Issue编号
  projectNumber = 45   # 替换为Projects V2的编号
}

# 发送请求并解析结果
$requestBody = @{
  query     = $query
  variables = $variables
} | ConvertTo-Json

$response = Invoke-RestMethod -Uri "https://api.github.com/graphql" -Method Post -Headers $headers -Body $requestBody

# 输出包含自定义字段的Issue信息
$response.data.repository.issue

3. 额外说明

  • 如果不确定自定义字段的类型,可以先查询项目的字段列表确认:
query GetProjectFields($owner: String!, $projectNumber: Int!) {
  organization(login: $owner) {
    projectV2(number: $projectNumber) {
      fields(first: 20) {
        nodes {
          ... on ProjectV2SingleSelectField { name id }
          ... on ProjectV2TextField { name id }
          ... on ProjectV2NumberField { name id }
        }
      }
    }
  }
}
  • 个人访问令牌必须拥有repo(仓库权限)和project(项目权限),否则会返回权限不足的错误。

内容的提问来源于stack exchange,提问作者Ashutosh Kumar Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:24:28