📅  最后修改于: 2023-12-03 15:09:16.056000             🧑  作者: Mango
在处理 JSON 数据时,很常见需要忽略某些属性中的空值。例如,如果我们使用 JSON 表示一个人的信息,那么如果他没有填写邮件地址,在 JSON 中就会出现一个 null
或者空字符串 ""
。有时候这种情况是我们期望的,但是有时候我们并不希望在处理 JSON 数据时考虑这些空值。在 C# 和 JavaScript 中,我们可以采用不同的方法来忽略空值。
在 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 中,我们可以使用 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() 方法的使用技巧,可以参考官方文档。