【问题标题】:how to encode and send to server json list by dio如何通过 dio 编码并发送到服务器 json 列表
【发布时间】:2019-08-26 21:53:11
【问题描述】:

我有生成 json 列表的类这是我的类

class Tool{
   String Name;
   bool  selection;
   String englishName;
   Map<String, dynamic> toJson() {
     return {
      'Name': persianName,
      'selection': selection,
      'englishName': englishName
  };

 }

 }

  List<Tool> tools=new List();
 setTool(tool){
   tools.add(tool);
 }
 toolsLength(){
   return tools.length;
 }
updatetool(index,goal){
  tools[index]=goal;
}
getTool(index){
  return tools[index];
}
getAllTools(){
  return tools;
}

这是 dio 库,可以将我的列表发送到服务器,一切正常,但我的数组是双引号,换句话说,我的列表是字符串,如何在 json 数组周围拾取双引号。如果假设我的 json 数组 hase

    "tools":  [{"name":"jack","selection" : false " ,"englishName":"jock"}]

结果是:

    "tools": "[{"name":"jack","selection" : false " ,"englishName":"jock"}]"

如何解决这是我的发送类

FormData formData = new FormData.from({
      "tools":jsonEncode(getAllTools().map((e) => e.toJson()).toList()) ,
  });
 response = await 
 dio.post("${strings.baseurl}/analyze/$username/$teacher", data: 
 formData);
print("----------> response is  :"+response.toString());

【问题讨论】:

    标签: json flutter dart


    【解决方案1】:

    编辑 您可以将以下代码粘贴到 DarPad https://dartpad.dartlang.org/ 以下演示展示了将您的 Json 字符串转换为工具列表并再次将您的工具列表转换为 JSON 字符串并使用 map.toJson

    var yourresult = toolList.map((e) => e.toJson()).toList();
    

    你可以在图片中看到结果

    使用 FormData.from 需要知道你的 api 的正确 JSON 字符串是什么。
    请使用 Postman 测试您的 web api,如果成功,您将知道正确的格式字符串。

    在你的代码中

    FormData formData = new FormData.from({
      "tools":jsonEncode(getAllTools().map((e) => e.toJson()).toList()) ,
     });
    

    如果你想这样做

    FormData formData = new FormData.from({
      "tools":'[{"name":"jack","selection" : false ,"englishName":"jock"}, {"name":"jack2","selection" : false ,"englishName":"jock2"}]' ,
     });
    

    这样你就可以先获取你的json字符串并将其放入FormData中

    var toolsJson =  toolsToJson(toolList);
    
    FormData formData = new FormData.from({
      "tools":toolsJson ,
     });
    

    完整的演示代码,可以粘贴到 DartPad 中查看字符串和列表的转换

    import 'dart:async';
    import 'dart:io';
    import 'dart:core';
    import 'dart:convert';
    
    class Tools {
        String name;
        bool selection;
        String englishName;
    
        Tools({
            this.name,
            this.selection,
            this.englishName,
        });
    
        factory Tools.fromJson(Map<String, dynamic> json) => new Tools(
            name: json["name"],
            selection: json["selection"],
            englishName: json["englishName"],
        );
    
        Map<String, dynamic> toJson() => {
            "name": name,
            "selection": selection,
            "englishName": englishName,
        };
    }
    
    main() {  
    
    List<Tools> toolsFromJson(String str) => new List<Tools>.from(json.decode(str).map((x) => Tools.fromJson(x)));
    
    String toolsToJson(List<Tools> data) => json.encode(new List<dynamic>.from(data.map((x) => x.toJson())));
    
    var toolsStr = '[{"name":"jack","selection" : false ,"englishName":"jock"}, {"name":"jack2","selection" : false ,"englishName":"jock2"}]';
    
    
    var toolList =   toolsFromJson(toolsStr);
    
    var toolsJson =  toolsToJson(toolList); 
    print("toolsJson ${toolsJson} \n");
    
    var toolsmap =  toolList[0].toJson();
    
    print("toolsmap ${toolsmap.toString()}\n");  
    
    var yourresult = toolList.map((e) => e.toJson()).toList();
    
    print(yourresult.toString());   
    
    }
    

    您可以将您的 JSON 字符串粘贴到 https://app.quicktype.io/,您将获得正确的 Dart 类

    正确的示例 JSON 字符串。在 false 关键字后跟一个 " 导致 JSON 字符串解析错误。

    [
        {"name":"jack",
         "selection" : false ,
         "englishName":"jock"
        }
    ]
    

    解析 JSON 字符串并编码为 List 的代码,使用 toJson 将转换为您需要以 dio 形式发送的 JSON 字符串

    // To parse this JSON data, do
    //
    //     final tools = toolsFromJson(jsonString);
    
    import 'dart:convert';
    
    List<Tools> toolsFromJson(String str) => new List<Tools>.from(json.decode(str).map((x) => Tools.fromJson(x)));
    
    String toolsToJson(List<Tools> data) => json.encode(new List<dynamic>.from(data.map((x) => x.toJson())));
    
    class Tools {
        String name;
        bool selection;
        String englishName;
    
        Tools({
            this.name,
            this.selection,
            this.englishName,
        });
    
        factory Tools.fromJson(Map<String, dynamic> json) => new Tools(
            name: json["name"],
            selection: json["selection"],
            englishName: json["englishName"],
        );
    
        Map<String, dynamic> toJson() => {
            "name": name,
            "selection": selection,
            "englishName": englishName,
        };
    }
    

    【讨论】:

    • 我是个大人物,请原谅我,但是如何填充这个数组以及必须放置什么变量而不是 jsonEncode(getAllTools().map((e) => e.toJson()).toList() ) 在我的代码中请帮助我
    • 我已经编辑了我的答案并提供了 DartPad 结果和演示使用 map.toJson 的代码
    • 很高兴为您提供帮助。如果它解决了您的问题,请将此作为答案。如果没有解决您的问题,请忽略此消息
    猜你喜欢
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多