C#中如何忽略JSON响应中的空字符串属性?
嘿,这个问题其实很好解决,思路和过滤null属性差不多,只是把判断条件换成空字符串就行!我给你几种常见的实现方式,你可以根据自己的场景选:
忽略JSON对象中的空字符串属性
1. 原生JavaScript手动遍历过滤
如果不想依赖第三方库,手动遍历对象属性是最直接的方案。核心就是逐个检查属性值,遇到空字符串('')就跳过,其他属性保留到新对象中:
const originalObj = { firstName: "xyz", lastName: "efh", id: 123, key: '' }; const filteredObj = {}; // 遍历原对象的所有键值对 for (const [key, value] of Object.entries(originalObj)) { // 这里可以按需扩展:比如同时过滤null、undefined和空字符串 if (value !== null && value !== undefined && value !== '') { filteredObj[key] = value; } } console.log(filteredObj); // 输出结果: { firstName: "xyz", lastName: "efh", id: 123 }
2. 封装成可复用的工具函数
如果需要多次用到这个逻辑,把它封装成函数会更方便,还能灵活调整过滤规则:
function filterEmptyStrings(obj) { return Object.fromEntries( // 过滤掉值为空字符串的键值对 Object.entries(obj).filter(([_, value]) => value !== '') // 如果要同时过滤null和undefined,改成: value != null && value !== '' ); } // 测试一下 const testObj = { firstName: "xyz", lastName: "efh", id: 123, key: '', age: null }; const result = filterEmptyStrings(testObj); console.log(result); // 输出: { firstName: "xyz", lastName: "efh", id: 123 }
3. 用Lodash简化(如果项目已引入)
如果你的项目已经在用Lodash,用_.omitBy方法可以一行搞定,非常简洁:
const _ = require('lodash'); const originalObj = { firstName: "xyz", lastName: "efh", id: 123, key: '' }; const filteredObj = _.omitBy(originalObj, value => value === ''); console.log(filteredObj); // 输出符合预期的结果
处理嵌套结构的情况
如果你的JSON是多层嵌套的对象或数组,就需要递归处理每个层级:
function deepFilterEmptyStrings(obj) { // 非对象类型直接返回 if (typeof obj !== 'object' || obj === null) { return obj; } // 数组的话,递归处理每个元素 if (Array.isArray(obj)) { return obj.map(item => deepFilterEmptyStrings(item)); } // 对象的话,过滤空字符串属性并递归处理属性值 return Object.fromEntries( Object.entries(obj) .filter(([_, value]) => value !== '') .map(([key, value]) => [key, deepFilterEmptyStrings(value)]) ); }
这样不管你的JSON结构多复杂,里面的空字符串属性都会被过滤掉啦~
内容的提问来源于stack exchange,提问作者Vicky
相关产品推荐
相关产品推荐

