Flutter解析资源JSON到Model类时出现类型不匹配异常
解决Flutter JSON解析错误:type 'String' is not a subtype of type 'Map<String, dynamic>'
你的错误根源是重复编码了JSON字符串,导致解码后得到的不是期望的Map类型,而是原始的JSON字符串本身。
问题分析
rootBundle.loadString('asset/hotel.json')已经获取到了格式正确的JSON字符串- 你额外执行了
jsonEncode(data),这会把原本的JSON字符串转成一个被转义的字符串(比如原JSON{"key":"val"}会变成"{\\"key\\":\\"val\\"}") - 再对这个转义后的字符串执行
json.decode,得到的结果还是最初的JSON字符串,而非Map<String, dynamic>,所以传给Package.fromJson时就会抛出类型不匹配的异常
修正后的代码
直接对加载到的JSON字符串执行解码即可,去掉多余的jsonEncode步骤:
loadJson() async { String data = await rootBundle.loadString('asset/hotel.json'); // 直接解码原始JSON字符串 Map<String, dynamic> valueMap = json.decode(data); Package user = Package.fromJson(valueMap); print(user.packageName); // 输出: Flexi Package }
额外说明
你的Package模型类的fromJson方法是正确的,JSON里的所有字段都是字符串类型,直接赋值完全匹配,不需要额外类型转换。
内容的提问来源于stack exchange,提问作者androholic
相关产品推荐
相关产品推荐

