Flutter/Dart中包含Map的List调用.toJson()方法报错如何解决?
问题原因
Dart 内置的List、Map基础类型本身没有实现toJson()方法,直接调用List.toJson()会触发未定义方法的报错。
解决方案
- 第一步:在代码文件头部引入Dart内置的转换库:
import 'dart:convert';
- 第二步:将请求参数里的
body: data.toJson()替换为body: jsonEncode(data)即可,jsonEncode方法会自动序列化List、Map类型为符合标准的JSON字符串。
修改后完整代码如下:
import 'dart:convert'; import 'package:http/http.dart' as http; List<dynamic> data = [ {'name': 'Name', 'type': 'STRING',}, {'name': 'Age', 'type': 'INTEGER'}, {'name': 'Weight', 'type': 'FLOAT'}, {'name': 'IsMagic', 'type': 'BOOLEAN'}, ]; Future creatingTable() async { var url = Uri.parse( 'https://us-central1-denance-cbf3f.cloudfunctions.net/api/create_table'); var response = await http.post( url, body: jsonEncode(data), // 仅修改此行 headers: < String, String > { 'Content-Type': 'application/json; charset=UTF-8', }, ); print( 'Response status: ${response.statusCode}'); print( 'Response body: ${response.body}'); }
补充说明
只有自定义的实体类才需要手动实现toJson()方法供jsonEncode内部调用序列化,Dart原生的集合类型不需要额外实现序列化逻辑。
内容的提问来源于stack exchange,提问作者macphail magwira
相关产品推荐
相关产品推荐

