如何通过名称删除JSON元素?Dart代码执行异常求助
解决Dart中删除JSON对象指定字段的问题
你的代码之所以没生效,是因为对jsonDecode后的结构理解有点偏差:jsonDecode(test)返回的是一个List<Map<String, dynamic>>(也就是包含一个Map的列表),而你用where方法是在筛选列表里的元素,不是操作Map里的键值对——这就相当于你想删除字典里的某个键,却在过滤整个字典本身,当然达不到目的啦。
下面给你两种可行的解决方案:
方法1:直接修改原Map(简单直接)
遍历列表里的每个Map,调用remove方法删除指定的key即可:
import 'dart:convert'; void main() { String test = '[{ "type":"new", "color":"red", "items": ["aa","bb", "cc"] }]'; // 明确指定类型,避免类型歧义 var myJson = jsonDecode(test) as List<Map<String, dynamic>>; // 遍历每个Map,删除"items"字段 myJson.forEach((map) => map.remove('items')); // 转成JSON字符串输出,就是你要的结果 print(jsonEncode(myJson)); // 输出: [{"type":"new","color":"red"}] }
方法2:创建新Map(不修改原数据,更安全)
如果你不想改动原始的JSON对象,可以通过map方法生成新的Map,排除掉不需要的字段:
import 'dart:convert'; void main() { String test = '[{ "type":"new", "color":"red", "items": ["aa","bb", "cc"] }]'; var myJson = jsonDecode(test) as List<Map<String, dynamic>>; // 生成新的Map列表,过滤掉"items"键 var result = myJson.map((map) { return Map.fromEntries( map.entries.where((entry) => entry.key != 'items') ); }).toList(); print(jsonEncode(result)); // 输出: [{"type":"new","color":"red"}] }
再回头看你的原代码:myJson.where((a)=> a != 'items')里的a是列表中的整个Map对象,和字符串'items'比较永远是true,所以返回的还是原列表,自然看不到任何变化啦~
内容的提问来源于stack exchange,提问作者Dmitry Bubnenkov
相关产品推荐
相关产品推荐

