Flutter JSON反序列化报错:Map<String,String>无法赋值给String类型
JSON反序列化错误:Map<String, String>无法转为String的解决方法
错误原因
你定义的jsonString本质是Map<String, String>类型的对象,但jsonDecode()方法要求传入JSON格式的字符串,类型不匹配导致了这个错误。
解决方案1:直接用Map构造User对象
既然已经有了现成的Map,不需要额外调用jsonDecode,直接传给User.fromJson()即可:
import 'dart:convert'; class User { User({ required this.name, required this.email, }); String name; String email; factory User.fromJson(Map<String, dynamic> json) => User( name: json["name"], email: json["email"], ); } void main() { var userMap = { "name": "Martin Perumala", "email": "martinarxxxxx@gmail.com" }; User user = User.fromJson(userMap); print(user.name); }
解决方案2:转成JSON字符串再解析
如果要模拟从字符串解析的场景(比如网络请求返回的JSON字符串),先把Map转成JSON格式字符串,再用jsonDecode解析:
import 'dart:convert'; class User { User({ required this.name, required this.email, }); String name; String email; factory User.fromJson(Map<String, dynamic> json) => User( name: json["name"], email: json["email"], ); } void main() { var userMap = { "name": "Martin Perumala", "email": "martinarxxxxx@gmail.com" }; // 将Map转为JSON字符串 String jsonString = jsonEncode(userMap); // 解析字符串得到Map后构造User User user = User.fromJson(jsonDecode(jsonString) as Map<String, dynamic>); print(user.email); }
内容的提问来源于stack exchange,提问作者user2955424
相关产品推荐
相关产品推荐

