在flutter中将嵌套数组数据发布到api

Posted

技术标签:

【中文标题】在flutter中将嵌套数组数据发布到api【英文标题】:post nested array data to api in flutter 【发布时间】:2022-01-04 06:51:56 【问题描述】:

我正在尝试使用 HTTP post 方法将嵌套数据发送到 API。 但由于映射错误,我无法发送数据。 下面是我为从 API 获取数据而制作的模型类-

class Assessment 
  Assessment(
    this.id,
    this.subId,
    this.question,
    this.assessment,
  );

  String id;
  String subId;
  String question;
  List<Assessment> assessment;

  factory AssessmentQuestionList.fromJson(Map<String, dynamic> json) =>
      AssessmentQuestionList(
        id: json["id"],
        subCategoryId: json["subId"],
        question: json["question"],
        assessment: List<Assessment>.from(
            json["assessment"]
                .map((x) => Assessment.fromJson(x))),
      );

  Map<String, dynamic> toJson() => 
        "id": id,
        "assessmentId": assessmentId,
        "subCategoryId": subCategoryId,
        "question": question,
        "assessment":
            List<dynamic>.from(assessment.map((x) => x.toJson())),
      ;


class Assessment 
  Assessment(
    this.id,
    this.assessmentQuestionId,
    this.option,
    this.isChecked,
  );

  String id;
  String assessmentQuestionId;
  dynamic option;
  bool isChecked;

  factory AssessmentAnswerList.fromJson(Map<String, dynamic> json) =>
      AssessmentAnswerList(
        id: json["id"],
        assessmentQuestionId: json["assessmentQuestionId"],
        option: json["option"],
        //optionValues.map[json["option"]],
        isChecked: json["isChecked"],
      );

  Map<String, dynamic> toJson() => 
        "id": id,
        "assessmentQuestionId": assessmentQuestionId,
        "option": option, //optionValues.reverse[option],
        "isChecked": isChecked,
      ;

在创建列表并将数据动态添加到其中之后,我将数据发送到我未来的方法,该方法将用于以下 api 调用 -

  Future<http.Response> saveassess(String authToken, String id, String assessmentId,
      var QuestionList, String childUserId,
      String notes) async 

    String uriparts =apiEndPoint.getUriParts('assess/Assess');
    Uri Url = apiEndPoint.getHTTPUri(uriparts);

    final response = await http.post(
      Url,
      headers: <String, String>
        'Content-Type': 'application/json; charset=UTF-8',
        'Authorization': authToken
      ,
      body: jsonEncode(<String, dynamic>
          "id": id,
          "assessmentId": assessmentId,
          "assessmentQuestionAnswerList": QuestionList,
          "childUserId": childUserId,
          "notes": notes,
      ),
    );
    print(response.body);
    handleAssesmentsResponse(response);
  

谁能告诉我我做错了什么,因为这是我第一次使用嵌套 API 调用? 谢谢

【问题讨论】:

【参考方案1】:

您还必须对每个单独的列表进行编码,如下所示,

jsonEncode(<String, dynamic>
          "id": id,
          "assessmentId": assessmentId,
          "assessmentQuestionAnswerList": jsonEncode(QuestionList),
          "assessmentQuestionAnswerList.assessmentAnswerList": jsonEncode(AnswerList),
          "childUserId": childUserId,
          "notes": notes,
      ),

【讨论】:

我这样做了,但我得到了错误 - I/flutter (2723): failed in details 将对象转换为可编码对象失败:LinkedHashSet len:8 可能需要为 QuestionList 指定数据类型进行编码,因为它不是 dart 中未预定义的数据类型

以上是关于在flutter中将嵌套数组数据发布到api的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中将单个数组转换为嵌套数组? [复制]

在 Flutter 中将 JSON 转换为类似于 android 的 POJO(对象)

将 JSON 反序列化为 C# 对象以在网格中将嵌套数组显示为字符串

如何在javascript中将嵌套集转换为嵌套数组?

如何在javascript中将嵌套对象转换为对象数组? [关闭]

在Javascript中将数组转换为嵌套的JSON?