Dart解析JSON报错:NoSuchMethodError - String类无forEach实例方法
解决NoSuchMethodError: Class 'String' has no instance method 'forEach'问题
错误原因
你代码里的json['selected_shop_type']实际返回的是字符串类型,但你默认它是可迭代的列表/数组,直接调用了forEach方法——而String类并没有这个方法,所以触发了报错。
两种常见场景的解决方案
场景1:后端返回的是字符串格式的数组(比如 "["type1","type2"]")
需要先把字符串解析为列表,再执行遍历逻辑:
if (json['selected_shop_type'] != null) { final v = json['selected_shop_type']; final arr0 = <String>[]; if (v is String) { // 将字符串格式的数组解析为List final parsedList = jsonDecode(v) as List; parsedList.forEach((item) { arr0.add(item.toString()); }); } else if (v is List) { // 正常数组的处理逻辑 v.forEach((item) { arr0.add(item.toString()); }); } _selectedShopType = arr0; }
场景2:后端把单个值返回成了字符串(比如本该返回["type1"]却返回"type1")
直接判断类型,单个字符串直接加入目标列表:
if (json['selected_shop_type'] != null) { final v = json['selected_shop_type']; final arr0 = <String>[]; if (v is String) { // 单个字符串直接添加到列表 arr0.add(v); } else if (v is List) { v.forEach((item) { arr0.add(item.toString()); }); } _selectedShopType = arr0; }
额外建议
优先和后端开发确认接口返回格式的一致性,同一个字段不要时而返回数组时而返回字符串,这种不规范的接口设计会无端增加前端的解析成本。
内容的提问来源于stack exchange,提问作者Muhammad Huzaifa
相关产品推荐
相关产品推荐

