如何在 Flutter 中将 json 列表传递给 http 请求(post)的正文?

Dou*_*ues 3 post json http dart flutter

我有用户将在表单中填写的对象。我将这些对象解析为 json 并将该 json 添加到列表中以传递请求正文。但我不能这样做。

\n\n
  incrementListPaymentSlipes(PaymentSlipes objPayment) async {\n    objPayment.name = "Douglas";\n    objPayment.personalId = "00000000000";\n    Map<String, dynamic> json = objPayment.toJson();\n    listPaymentSlipes.add(jsonEncode(json));\n  }\n
Run Code Online (Sandbox Code Playgroud)\n\n
var response = await http.post(url, body: {\n"payment_slips": listPaymentSlipes,\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

正确身体的例子:

\n\n
"payment_slips": [\n    {      \n      "personal_id": "01888728680",\n      "name": "Fulano da Silva"\n    }\n  ]\n
Run Code Online (Sandbox Code Playgroud)\n\n
 {"error":"\'{{personal_id: 00000000000, name: Douglas}}\' \xc3\x83\xc2\xa9 invalido como \'payment_slips\'","code":"payment_slips_invalid"}```\n
Run Code Online (Sandbox Code Playgroud)\n

san*_*jay 5

您可以用一种非常简单的方式做到这一点。创建payment.dart文件并复制粘贴以下代码类。

class PaymentList {
PaymentList(this.payments);

List<Payment> payments;

Map<String, dynamic> toJson() => <String, dynamic>{
    'payment_slips': payments,
  };
}

class Payment {
Payment({this.name, this.personalId});

String name;
String personalId;

Map<String, dynamic> toJson() => <String, dynamic>{
    'personal_id': personalId,
    'name': name,
  };
}
Run Code Online (Sandbox Code Playgroud)

现在您可以使用以下代码将其转换为所需的 json 格式。例如,我正在创建一个虚拟列表:

final PaymentList paymentList =
    PaymentList(List<Payment>.generate(2, (int index) {
  return Payment(name: 'Person $index', personalId: '$index');
}));
final String requestBody = json.encoder.convert(paymentList);
Run Code Online (Sandbox Code Playgroud)

requestBody 变量将具有如下 json 字符串:

  {"payment_slips": [
    {
        "personal_id": "0",
        "name": "Person 0"
    },
    {
        "personal_id": "1",
        "name": "Person 1"
    }
  ]}
Run Code Online (Sandbox Code Playgroud)

现在您可以调用 api:

var response = await http.post(url, body: requestBody}
Run Code Online (Sandbox Code Playgroud)

注意:请导入以下包,访问时需要该包json:

import 'dart:convert';
Run Code Online (Sandbox Code Playgroud)