如何移除GraphQL响应JSON数据中的空值字段
移除GraphQL响应中的null字段方法
方法一:在解析器中手动过滤
直接在返回数据前,把值为null的字段剔除掉。以Node.js环境为例,解析器可以这么写:
const resolvers = { Query: { userList: () => { // 假设这是从数据库或其他数据源拿到的原始数据 const rawData = { name: "my name", test: null }; // 过滤掉值为null的键值对 return Object.fromEntries( Object.entries(rawData).filter(([_, value]) => value !== null) ); }, }, };
方法二:全局响应格式化(批量处理)
如果想统一处理所有GraphQL响应的null字段,可以用服务端的响应格式化钩子。比如在Apollo Server中,通过formatResponse选项实现递归过滤:
const server = new ApolloServer({ typeDefs, resolvers, formatResponse: (response) => { // 递归遍历对象/数组,移除null字段 const stripNulls = (data) => { if (Array.isArray(data)) { return data.map(stripNulls); } if (typeof data === 'object' && data !== null) { return Object.fromEntries( Object.entries(data) .filter(([_, val]) => val !== null) .map(([key, val]) => [key, stripNulls(val)]) ); } return data; }; return { ...response, data: stripNulls(response.data) }; }, });
额外说明
GraphQL默认规则是:只要客户端在查询中明确请求了某个字段,不管该字段值是null还是其他,都会在响应中返回这个字段。如果能协调客户端只查询需要的字段,也能避免返回null字段;但如果客户端必须请求该字段,就用上面两种后端处理方法。
内容的提问来源于stack exchange,提问作者SefaUn
相关产品推荐
相关产品推荐

