我是 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)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           3833 次  |  
        
|   最近记录:  |