使用NodeJS写入JSON文件时如何忽略null或空值字段
方案1:使用JSON.stringify的replacer参数实现(无需引入额外依赖)
JSON.stringify() 方法支持传入第二个参数作为替换函数,你可以在这个函数里自定义字段的序列化规则:如果值为null或者空字符串,直接返回undefined,JSON序列化时会自动忽略返回undefined的字段。
修改后的代码如下:
const fs = require('fs'); const params = { productID: 'prd323434', productName: 'Google', productDesc: 'Larum ipsum', productPrice: null, productRating: '', productReview: 'Lorum ipsum' }; var data = { productID: params.productID, productName: params.productName, productDesc: params.productDesc, productPrice: params.productPrice, productRating: params.productRating, productReview: params.productReview }; // 核心修改:增加replacer函数过滤空值和null let jsonContent = JSON.stringify(data, (key, value) => { if (value === null || value === '') return undefined; return value; }); fs.writeFileSync('test.json', jsonContent); console.log(jsonContent)
运行后输出的JSON就不会包含productPrice和productRating字段了。
方案2:先过滤对象属性再序列化
如果你后续还需要用到过滤后的对象,可以先预处理删除符合条件的字段:
// 写一个通用过滤函数 function filterEmptyFields(obj) { const filtered = {}; for (const key in obj) { const value = obj[key]; if (value !== null && value !== '') { filtered[key] = value; } } return filtered; } // 处理data后再序列化 const filteredData = filterEmptyFields(data); let jsonContent = JSON.stringify(filteredData);
方案3:使用Lodash工具库(适合项目已引入Lodash的场景)
如果你的项目里已经用了Lodash,可以直接用omitBy方法一行实现过滤:
const _ = require('lodash'); let jsonContent = JSON.stringify(_.omitBy(data, v => v === null || v === ''));
内容的提问来源于stack exchange,提问作者Brady Maf
相关产品推荐
相关产品推荐

