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

如何通过名称删除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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:02:22