Flutter如何从JSON对象中提取notelp字段值?
解决JSON数组中提取指定字段的问题
嘿,我来帮你搞定这个问题~你遇到的核心问题是没注意到data字段对应的是一个数组(JSON里用[]包裹的部分),而不是单个对象,所以直接写result['data']['notelp']肯定拿不到值,得遍历数组里的每一项才行。
问题分析
你的原始JSON里data是包含多个对象的数组:
{"msg": "Success", "data": [{"id": "1", "notelp": "0000000000", "user": "no1"}, {"id": "2", "notelp": "1111111111", "user": "no2"}]}
你之前的代码试图直接从data这个数组里取notelp键,这就像对着一篮子苹果直接要“篮子的苹果”,而不是挨个拿出每个苹果一样,肯定行不通。
修正后的代码
这里给你写好可以直接用的Dart代码:
if (response.statusCode == 200) { final result = json.decode(response.body); // 先取出data数组,确保它是List类型 final List<dynamic> dataArray = result['data']; // 遍历数组,提取每个元素的notelp字段并转成Set final Set<String> telpSet = dataArray .map((item) => item['notelp'] as String) .toSet(); debugPrint('dataTelp: $telpSet'); }
代码解释
- 先从解析后的JSON里取出
data数组,存为dataArray。 - 使用
map方法遍历数组里的每一个对象,把每个对象的notelp字段提取出来。 - 最后用
toSet()把提取到的列表转换成Set,正好匹配你期望的{"0000000000", "1111111111"}格式。
额外的容错处理(可选)
如果担心data为空,或者某个对象里没有notelp字段,可以加个判空逻辑避免报错:
if (response.statusCode == 200) { final result = json.decode(response.body); final List<dynamic>? dataArray = result['data']; if (dataArray != null) { final Set<String> telpSet = dataArray .where((item) => item != null && item['notelp'] != null) // 过滤无效数据 .map((item) => item['notelp'] as String) .toSet(); debugPrint('dataTelp: $telpSet'); } }
内容的提问来源于stack exchange,提问作者Mas'ud Al Hafiz
相关产品推荐
相关产品推荐

