在颤振中将请求复杂的json发布到api

Posted

技术标签:

【中文标题】在颤振中将请求复杂的json发布到api【英文标题】:post request complex json to api in flutter 【发布时间】:2020-03-15 23:47:43 【问题描述】:

我有这个 json 我想发布到一个 api 但我不确定它是如何完成的..这就是请求的样子:

  
    "products": [
        "id":1, "qty": 1,"id":2, "qty": 1
    ],
    "vendor_id": 1,
    "notes": " ",
    "address": ""

这是我用来映射请求的请求类:

    class Order

  int vendor_id;
  String address ,notes ;
  List<OrderProduct> products;

  Order(this.products , this.address , this.notes , this.vendor_id);

  Map<String, dynamic> toMap() 
    return 
      'vendor_id': vendor_id,
      'address': address,
      'notes': notes,
      'products': products,
    ;
  




class OrderProduct
  int id , qty ;
  OrderProduct(this.id , this.qty);
  Map<String, dynamic> toMap() 
    return 
      'id': id,
      'qty': qty,
    ;
  

我错过了什么?

【问题讨论】:

【参考方案1】:

就像json.encode(myArr)那样做, 例如

 Map<String, String> params = 
      "mobile": userNameController.text,
      "password": passwordController.text,
      "deviceid": '$fcmToken',
    ;
 Future<String> postRequest(var url, var postParams) async 
    return http
        .post(url, body: json.encode(postParams))// do json encoding here 
        .then((http.Response response) 
      final int statusCode = response.statusCode;
      print("postParams " + json.encode(postParams));
      print("statusCode " + '$statusCode $response.body');
      if (statusCode < 200 || statusCode > 400 || json == null) 
        throw new Exception("Error while fetching data");
      
      print(response.request);
      return response.body;
    );
  

【讨论】:

【参考方案2】:

我在正文中发布的 Json..


       "products": [
          "id":1, "qty": 1,"id":2, "qty": 1
       ],
       "vendor_id": 1,
       "notes": " ",
       "address": ""
    

您的 Post Api 调用如下:

Future<Order> postOrder(int vendor_id, String notes, String address, int 
 id1,int q1, int id2, int q2) async 

 Paste your api url here
 String url = '';
 final response = await http.post(apiUrl, headers: 
   // Enter your headers parameter if needed
   //  E.g: 
  'Authorization' : 'xyz',
  'Content-Type' : 'application/json'
 ,
body: jsonEncode(<String, String>
  'vendor_id' : vendor_id,
  'notes' : notes,
  'address' : address,
  'products' : [
   'id': id1,'qty' : q1,
   'id' : id2,'qty' : q2
  ]
));

  if (response.statusCode == 200) 
    var data = jsonDecode(response.body.toString());
    print(data);
     return Order.fromJson(jsonDecode(response.body));
    else 
  throw Exception('Failed to post user.');
  
 

你的模型是这样的:

class Order 
    List<Products>? products;
     int? vendorId;
     String? notes;
     String? address;

Order(this.products, this.vendorId, this.notes, this.address);

Order.fromJson(Map<String, dynamic> json) 
   if (json['products'] != null) 
     products = <Products>[];
     json['products'].forEach((v) 
       products!.add(new Products.fromJson(v));
     );
    
    vendorId = json['vendor_id'];
    notes = json['notes'];
    address = json['address'];
  

 Map<String, dynamic> toJson() 
   final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.products != null) 
      data['products'] = this.products!.map((v) => v.toJson()).toList();
    
    data['vendor_id'] = this.vendorId;
    data['notes'] = this.notes;
    data['address'] = this.address;
    return data;
  
 

  class Products 
    int? id;
    int? qty;

    Products(this.id, this.qty);

    Products.fromJson(Map<String, dynamic> json) 
       id = json['id'];
       qty = json['qty'];
    
 
     Map<String, dynamic> toJson() 
       final Map<String, dynamic> data = new Map<String, dynamic>();
          data['id'] = this.id;
          data['qty'] = this.qty;
          return data;
        
     

【讨论】:

以上是关于在颤振中将请求复杂的json发布到api的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤振中解析复杂的json

如何在颤振中使用 json API 在谷歌地图中添加标记?

如何在 JAVA 中将 JSON 和文件传递给 REST API?

我想在 html 中将数据显示为 json

在 Web Api 控制器中将 JSON 反序列化为字典

在颤动中将文件发送到api