【问题标题】:Error FormatException: Unexpected character (at character 1) <br/> Flutter错误 FormatException:意外字符(在字符 1 处)<br/> Flutter
【发布时间】:2021-05-16 03:52:51
【问题描述】:

我想在 Flutter 上将这个值显示给 listview

[{"No":0,"interest":"0.00","balance":"13,000,000.00","principal":"0.00","Installment":"0.00","Status":true},{"No":1,"interest":"130,000.00","balance":"0.00","principal":"13,000,000.00","Installment":"13,130,000.00","Status":true}]

但我得到的结果像

I/flutter (12074): Error FormatException: Unexpected character (at character 1)
I/flutter (12074): <br />
I/flutter (12074): ^
I/flutter (12074): 

这是我的 List LoanModel

static Future<List<LoanModel>> getsimulation({String periodtime, String interestpermonth, String loanamountrequest, String idUser, String url}) async  {
    var url = "http://192.168.0.23/edufund-api/Api/loansimulation.php?periodtime=" + periodtime + "&interestpermonth=" + interestpermonth + "&loanamountrequest=" +loanamountrequest;
    final response = await http.get(url,headers:{"Content-Type":
    "application/json"});
    var res = LoanModel.fromJson(jsonDecode(response.body)[0]);
    print(response.body);
  }

这里是在已经输入值 periodtime、interestpermonth 和 loanamountrequest 时加载 JSON 的函数

_load() async {
    List<LoanModel> loanmodel =
    (await RestApi.getsimulation());
    setState(() => _loanmodel = loanmodel);
  }

这是我的模型

List<LoanModel> allLoan(String str) {
  final jsonData = json.decode(str);
  return new List<LoanModel>.from(jsonData.map((x) => LoanModel.fromJson(x)));
}

class LoanModel {
  bool Status;
  String message;
  String No;
  String interest;
  String balance;
  String principal;
  String Installment;
  List<Data> data;

  LoanModel({
    this.Status,
    this.message,
    this.No,
    this.interest,
    this.balance,
    this.principal,
    this.Installment,
    this.data,
  });

  factory LoanModel.fromJson(Map<String, dynamic> parsedJson) {
    var list = parsedJson['data'] as List;
    print(list.runtimeType);
    List<Data> dataList = list.map((i) => Data.fromJson(i)).toList();

    return LoanModel(
      Status: parsedJson['Status'],
      message: parsedJson['message'],
      No : parsedJson['No'],
      interest: parsedJson['interest'],
      balance: parsedJson['balance'],
      principal: parsedJson['principal'],
      Installment: parsedJson['Installment'],
      data: dataList,
    );
  }
}

class Data {
  final int No;
  final String interest;
  final String balance;
  final String principal;
  final String Installment;

  Data({
    this.No,
    this.interest,
    this.balance,
    this.principal,
    this.Installment
  });

  factory Data.fromJson(Map<String, dynamic> parsedJson) {
    return Data(
      No: parsedJson['No'],
      interest: parsedJson['interest'],
      balance: parsedJson['balance'],
      principal: parsedJson['principal'],
      Installment: parsedJson['Installment']
    );
  }

结果是这样继续加载

输出应该是这样的

我怎样才能像图片 2 一样输出,以及如何在颤动中解决这个 Unexpected 字符? 谢谢

【问题讨论】:

  • 我会说你得到了一个不是 200 的 HTTP 响应代码,并且伴随着一个 HTML 错误页面。在尝试将响应解析为 JSON 之前检查响应代码。
  • 在邮递员中,API 工作正常。对此有何建议?
  • 结果为 200 但返回错误
  • I/flutter (12439): true I/flutter (12439): 200 I/flutter (12439): Error FormatException: Unexpected character (at character 1) I/flutter (12439):
  • 好吧,您必须在尝试解析之前打印出您实际收到的内容,以查看发送给您的内容。错误似乎在另一端,发送 HTML 而不是 JSON。

标签: flutter


【解决方案1】:

我可以在本地使用 JSON 解析它。更新数据模型:

import 'dart:convert';

List<LoanModel> loanModelFromJson(String str) => List<LoanModel>.from(json.decode(str).map((x) => LoanModel.fromJson(x)));

String loanModelToJson(List<LoanModel> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson())));

class LoanModel {
    LoanModel({
        this.no,
        this.interest,
        this.balance,
        this.principal,
        this.installment,
        this.status,
    });

    int no;
    String interest;
    String balance;
    String principal;
    String installment;
    bool status;

    factory LoanModel.fromJson(Map<String, dynamic> json) => LoanModel(
        no: json["No"],
        interest: json["interest"],
        balance: json["balance"],
        principal: json["principal"],
        installment: json["Installment"],
        status: json["Status"],
    );

    Map<String, dynamic> toJson() => {
        "No": no,
        "interest": interest,
        "balance": balance,
        "principal": principal,
        "Installment": installment,
        "Status": status,
    };
}

任何尝试像这样解析它:

arr = loanModelFromJson(response.body);

RestAPI 调用

class APIManager {
  final String baseURL = [BaseURL];

  getData(apiUrl) async {
    var fullUrl = baseURL + apiUrl;
    return await http.get(Uri.parse(fullUrl), headers: _setHeader());
  }
}

  Future<void> getData() async {
    var response = await APIManager().getData([Endpoint]);
    arr = loanModelFromJson(response.body);
  }

【讨论】:

    猜你喜欢
    • 2019-09-04
    • 2021-03-30
    • 1970-01-01
    • 2022-11-07
    • 2022-09-29
    • 1970-01-01
    • 2020-06-16
    • 2021-07-31
    • 1970-01-01
    相关资源
    最近更新 更多