You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:24:03