Dart解析嵌套JSON时报List<dynamic>不是String子类型错误如何解决
报错原因
你代码里的错误出在Pet类的allPetFromJson方法定义上:
- 你给这个方法定义的入参是
String jsonData,但在Person类的_mapPerson方法中调用它时,传入的是map['pets']——这个值是已经解码后的List<dynamic>类型的宠物数组,不是JSON字符串,自然会报「List不能转为String」的类型错误。 - 另外
allPetFromJson方法内部还额外做了一次json.decode、还尝试从根节点取['person']['pets'],完全不符合当前嵌套解析的逻辑。
修复方案
直接修改Pet类的allPetFromJson方法即可:
// 修改前 // static List<Pet> allPetFromJson(String jsonData) { // List<Pet> pet = []; // json.decode(jsonData)['person']['pets'].forEach((data) => pet.add(_mapPet(data))); // return pet; // } // 修改后 static List<Pet> allPetFromJson(List<dynamic> petsList) { List<Pet> pet = []; for (var petItem in petsList) { pet.add(_mapPet(petItem)); } return pet; }
修改后重新运行代码,即可正常嵌套打印Person和对应的Pet信息。
内容的提问来源于stack exchange,提问作者Fitri Izuan
相关产品推荐
相关产品推荐

