如何通过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
相关产品推荐
相关产品推荐

