dynamic removeNull(dynamic params) {
if (params is Map) {
var _map = {};
params.forEach((key, value) {
var _value = removeNull(value);
if (_value != null) {
_map[key] = _value;
}
});
// comment this condition if you want empty dictionary
if (_map.isNotEmpty)
return _map;
} else if (params is List) {
var _list = [];
for (var val in params) {
var _value = removeNull(val);
if (_value != null) {
_list.add(_value);
}
}
// comment this condition if you want empty list
if (_list.isNotEmpty)
return _list;
} else if (params != null) {
return params;
}
return null;
}
Map<String, Object?> removeAllNulls(Map<String, Object?> map) {
final data = {...map};
data.removeWhere((key, value) => value == null);
for (final entry in data.entries.toList()) {
final value = entry.value;
if (value is Map<String, Object?>) {
data[entry.key] = removeAllNulls(value);
} else if (value is List<Object?>) {
final list = List.from(value);
for (var i = 0; i < list.length; i++) {
final obj = list[i];
if (obj is Map<String, Object?>) {
list[i] = removeAllNulls(obj);
}
}
data[entry.key] = list;
}
}
return data;
}
用法:
var jsonData = jsonDecode(jsonEncode(example.toJson()));
jsonData = removeAllNulls(jsonData);
7条答案
按热度按时间0h4hbjxa1#
在
Map
上使用removeWhere
删除要过滤掉的条目:如果你想把它作为
toMap()
方法的一部分,你可以用cascade运算符来做类似这样的事情:lnlaulya2#
现在,您可以将Map文字与条件条目一起使用:
8xiog9wr3#
我这样做是为了使用removeWhere更容易地从map和list中删除空值:https://dartpad.dartlang.org/52902870f633da8959a39353e96fac25
样品:
taor4pac4#
示例:
输出:
注:
如果在map和list的子元素具有空值时需要空的map和list,请在代码中注解掉map和list的空检查。
quhf5bfb5#
建议使用removeWhere函数
vulvrdjw6#
也许,就像我所做的,有人可能会来寻找,如何从一个模型中删除空字段,该模型将使用retrofit和dio in flutter发送到API下面是我用来从Model对象中删除空值的方法
@正文(空到不存在:正确)
例如
*nullToAbsent参数就能解决问题 *
relj7zay7#
这是我在Flutter 3中使用的方法:
用法: