编辑
您可以将以下代码粘贴到 DarPad https://dartpad.dartlang.org/
以下演示展示了将您的 Json 字符串转换为工具列表并再次将您的工具列表转换为 JSON 字符串并使用 map.toJson
var yourresult = toolList.map((e) => e.toJson()).toList();
你可以在图片中看到结果
使用 FormData.from 需要知道你的 api 的正确 JSON 字符串是什么。
请使用 Postman 测试您的 web api,如果成功,您将知道正确的格式字符串。
在你的代码中
FormData formData = new FormData.from({
"tools":jsonEncode(getAllTools().map((e) => e.toJson()).toList()) ,
});
如果你想这样做
FormData formData = new FormData.from({
"tools":'[{"name":"jack","selection" : false ,"englishName":"jock"}, {"name":"jack2","selection" : false ,"englishName":"jock2"}]' ,
});
这样你就可以先获取你的json字符串并将其放入FormData中
var toolsJson = toolsToJson(toolList);
FormData formData = new FormData.from({
"tools":toolsJson ,
});
完整的演示代码,可以粘贴到 DartPad 中查看字符串和列表的转换
import 'dart:async';
import 'dart:io';
import 'dart:core';
import 'dart:convert';
class Tools {
String name;
bool selection;
String englishName;
Tools({
this.name,
this.selection,
this.englishName,
});
factory Tools.fromJson(Map<String, dynamic> json) => new Tools(
name: json["name"],
selection: json["selection"],
englishName: json["englishName"],
);
Map<String, dynamic> toJson() => {
"name": name,
"selection": selection,
"englishName": englishName,
};
}
main() {
List<Tools> toolsFromJson(String str) => new List<Tools>.from(json.decode(str).map((x) => Tools.fromJson(x)));
String toolsToJson(List<Tools> data) => json.encode(new List<dynamic>.from(data.map((x) => x.toJson())));
var toolsStr = '[{"name":"jack","selection" : false ,"englishName":"jock"}, {"name":"jack2","selection" : false ,"englishName":"jock2"}]';
var toolList = toolsFromJson(toolsStr);
var toolsJson = toolsToJson(toolList);
print("toolsJson ${toolsJson} \n");
var toolsmap = toolList[0].toJson();
print("toolsmap ${toolsmap.toString()}\n");
var yourresult = toolList.map((e) => e.toJson()).toList();
print(yourresult.toString());
}
您可以将您的 JSON 字符串粘贴到 https://app.quicktype.io/,您将获得正确的 Dart 类
正确的示例 JSON 字符串。在 false 关键字后跟一个 " 导致 JSON 字符串解析错误。
[
{"name":"jack",
"selection" : false ,
"englishName":"jock"
}
]
解析 JSON 字符串并编码为 List 的代码,使用 toJson 将转换为您需要以 dio 形式发送的 JSON 字符串
// To parse this JSON data, do
//
// final tools = toolsFromJson(jsonString);
import 'dart:convert';
List<Tools> toolsFromJson(String str) => new List<Tools>.from(json.decode(str).map((x) => Tools.fromJson(x)));
String toolsToJson(List<Tools> data) => json.encode(new List<dynamic>.from(data.map((x) => x.toJson())));
class Tools {
String name;
bool selection;
String englishName;
Tools({
this.name,
this.selection,
this.englishName,
});
factory Tools.fromJson(Map<String, dynamic> json) => new Tools(
name: json["name"],
selection: json["selection"],
englishName: json["englishName"],
);
Map<String, dynamic> toJson() => {
"name": name,
"selection": selection,
"englishName": englishName,
};
}