📜  如何设置属性以忽略空值json c# - Javascript(1)

📅  最后修改于: 2023-12-03 15:09:16.056000             🧑  作者: Mango

如何设置属性以忽略空值 JSON(C# / JavaScript)

在处理 JSON 数据时,很常见需要忽略某些属性中的空值。例如,如果我们使用 JSON 表示一个人的信息,那么如果他没有填写邮件地址,在 JSON 中就会出现一个 null 或者空字符串 ""。有时候这种情况是我们期望的,但是有时候我们并不希望在处理 JSON 数据时考虑这些空值。在 C# 和 JavaScript 中,我们可以采用不同的方法来忽略空值。

C#

在 C# 中,我们可以通过给属性或者字段添加 DefaultValue 特性来设置默认值。例如:

public class Person
{
    [DefaultValue("")]
    public string Email { get; set; }
}

这样,如果在 JSON 数据中 Email 属性的值为空值,就会被自动忽略。但是需要注意的是,需要在序列化时指定一个设置选项(DefaultValueHandling)来启用这个特性:

var settings = new JsonSerializerSettings
{
    DefaultValueHandling = DefaultValueHandling.Ignore
};

string json = JsonConvert.SerializeObject(person, settings);

这个设置选项同样可以用于忽略其它默认值和空值。更多关于 Newtonsoft.Json 库的使用技巧,可以参考官方文档

JavaScript

在 JavaScript 中,我们可以使用 JSON.stringify() 方法的第二个参数来设置一个 replacer 函数。这个函数会在序列化时被调用,我们可以在这里自定义序列化的逻辑。例如:

var person = {
    name: "John",
    age: 30,
    email: "",
    address: null,
    phone: undefined
};

var json = JSON.stringify(person, function(key, value) {
    if (value === "" || value === null || value === undefined) {
        return undefined;
    } else {
        return value;
    }
});

console.log(json);
// {"name":"John","age":30}

这里的 replacer 函数会检查每一个属性的值,如果是空值,就返回 undefined。这个属性就会被忽略掉。

当然,如果我们在多个地方都需要用到这个 replacer 函数,最好是把它定义成一个独立的函数:

function ignoreEmpty(key, value) {
    if (value === "" || value === null || value === undefined) {
        return undefined;
    } else {
        return value;
    }
}

var json = JSON.stringify(person, ignoreEmpty);

这样就可以方便地重复使用了。更多关于 JSON.stringify() 方法的使用技巧,可以参考官方文档