如何让GraphQL返回以ID为键的对象而非数组?
如何让GraphQL返回以ID为键的对象格式?
完全可行,分两种场景处理:
1. 你能控制GraphQL服务端API
直接修改查询对应的Resolver逻辑,同时调整Schema的返回类型:
- 修改Resolver:将查询得到的数组转换为以ID为键的对象。以JavaScript为例:
async function getLicenses() { // 从数据源获取数组格式的数据 const rawData = await fetchLicensesFromDB(); // 转换为目标格式 return rawData.reduce((result, item) => { result[item.id] = { license: item.license }; return result; }, {}); }
- 调整Schema:由于GraphQL是强类型系统,动态键的对象无法用常规对象类型定义,建议使用JSON标量类型(多数GraphQL库如Apollo Server、GraphQL.js都支持,或可自定义)。Schema示例:
scalar JSON type Query { licenses: JSON! }
2. 无法修改服务端API
在客户端拿到返回的数组后,自行转换格式。以JavaScript为例:
// 假设GraphQL返回的数组数据为licensesArray const licensesArray = [ { id: 19234, license: "value1" }, { id: 25479, license: "value2" } ]; // 转换为目标对象格式 const licensesMap = licensesArray.reduce((acc, item) => { acc[item.id] = { license: item.license }; return acc; }, {});
内容的提问来源于stack exchange,提问作者Thomas Progli
相关产品推荐
相关产品推荐

