我是 flutter 新手,正在使用 json。当我使用以下命令解码从服务器获得的响应时,json.decode()有时会出现以下错误
flutter: FormatException: Unexpected character (at character 21)
Run Code Online (Sandbox Code Playgroud)
有时它工作得很好。
这是我的代码
try {
Map<String, dynamic> map = new Map<String, dynamic>.from(
json.decode(contents));
if (map["CompletedJobPackages"] != null) {
DataStream.compleatedJobspackage =
DataStream.parseCompletedJobs(map["CompletedJobPackages"]);
print(map["CompletedJobPackages"]);
compleatedJobs = DataStream.compleatedJobspackage;
}
CompletedJobloaded = true;
}
catch(e){
print(e);
ToastUtils.showCustomToast(context, "An Error Occured. Try Again !", false);
}
Run Code Online (Sandbox Code Playgroud)
这是我要解码的对象
{
"CompletedJob": {
"CompletedJobID": 7,
"DriverID": 34,
"JobNumber": "80252C20",
"TraderID": 7,
"TripType": "Two Way",
"CargoType": "wd",
"CargoWeight": 230,
"LoadingPlace": "dc",
"UnloadingPlace": "sd",
"LoadingDate": "2020-05-25",
"LoadingTime": "12:59:00",
"EntryExit": 1,
"AcceptedDelay": 4,
"Price": 34,
"Created": "2020-05-23T04:22:10.000Z"
},
"BillPaid": 0,
"DriverReview": {
"DriverReviewID": 11,
"DriverID": 34,
"TraderID": 7,
"CompletedJobID": 7,
"Rating": 100,
"Review": "dscsdc",
"Created": "2020-05-28"
}
},
Run Code Online (Sandbox Code Playgroud)
好吧,经过一些研究后,我意识到了这个问题。我使用的 HTTP 库dart:io没有在响应中返回完整的 JSON 字符串,因此在将其转换为 JSON 对象时出现问题
我刚用过
import 'package:http/http.dart' as http;
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Accept': 'application/json',
'Authorization':"JWT "+DataStream.token
};
final response = await http.get(URLs.getCompletedJobPackagesURL(), headers:requestHeaders);
if (response.statusCode == 200) {
var jsonResponse = convert.jsonDecode(response.body);
print(jsonResponse);
Map<String, dynamic> map = convert.jsonDecode(response.body);
if(map["CompletedJobPackages"]!= null) {
DataStream.compleatedJobspackage =
DataStream.parseCompletedJobs(map["CompletedJobPackages"]);
compleatedJobs = DataStream.compleatedJobspackage;
}
setState(() {
});
}
Run Code Online (Sandbox Code Playgroud)
代替
import 'dart:io';
final client = HttpClient();
try{
final request = await client.getUrl(Uri.parse(URLs.getDrivingLicenceURL()));
request.headers.set(HttpHeaders.contentTypeHeader, "application/json; charset=UTF-8");
request.headers.add("Authorization", "JWT "+DataStream.token);
final response = await request.close();
response.transform(utf8.decoder).listen((contents) async {
// print(response.statusCode);
Map<String, dynamic> driverMap = jsonDecode(contents) as Map<String, dynamic>;
isloadlicence = true;
if(driverMap["CompletedJobPackages"]!= null) {
DataStream.compleatedJobspackage =
new DrivingLicence.fromJson(driverMap["CompletedJobPackages"]);
}
setState(() {
});
});
}catch(e){
print(e);
ToastUtils.showCustomToast(context, "An Error Occurred. Try Again !", false);
//pr.hide();
}
Run Code Online (Sandbox Code Playgroud)