簡體   English   中英

如何將動態復雜 json 解析為飛鏢對象或模型

[英]how to parse dynamic complex json to dart object or model

{
"transactionId": "11f8ecc05273e35a4eb2dc1a",
"type": "REQUEST_FOR_HH_INTERVIEW",
"answers": {
  "selectProvinceDistrictCommuneVillage": {
    "value": "01020706"
  },
  "positionOfOfficial": {
    "value": "Province Officer"
  },
  "enterKhmerName": {
    "value": "សុខ"
  },
  "selectSex": {
    "value": "MALE"
  },
  "dob": {
    "value": "1994-06-15T03:27:47.409Z"
  },
  "areYouMarried": {
    "value": "YES"
  },
  "scanSpousesID": {
    "value": "435465"
  },
  "enterSpousesKhmerName": {
    "value": "នារី"
  },
  "selectSexSpouse": {
    "value": "FEMALE"
  },
  "dobSpouse": {
    "value": "1996-08-15T03:27:47.409"
  },
  "numberOfMales": {
    "value": "4"
  },
  "numberOfFemales": {
    "value": "5"
  },
  "selectReasonForRequesting": {
    "value": [
      "NATURAL_DISASTER"
    ]
  }
}
}

所以這是我需要解析成飛鏢模型的 JSON。 我在這種結構中遇到的問題是答案中的地圖都是動態的。 此外,答案中的地圖數量並不總是相同的。 例如,下一個 JSON 響應可以是。

{
 "transactionId": "11f8ecc05273e35a4eb2dc1a",
 "type": "REQUEST_FOR_HH_INTERVIEW",
 "answers": {
   "selectCode": {
   "value": "01020706"
  },
  "selectRoomValue": {
  "value": "1996-08-15T03:27:47.409"
 },
 "numberOfFamilyMembers": {
  "value": "4"
  },
 "selectFoods": {
   "value": [
     "Piza",
     "Burger"
   ]
  }
 }
}

這與第一個響應不同。 我需要制作一個解析兩種響應的飛鏢模型。

通過使用將存儲在假定的InterviewRequest模型中的Answers的“子模型”,這相對容易做到。

例如:

class InterviewRequest {
  final Answers answers;
  final String transactionId;

  factory InterviewRequest.fromJson(Map<String, dynamic> json) {
    return InterviewRequest(
      answers: Answers.fromJson(json['answers']),
      transactionId: json['transactionId'] as String,
    );
  }
}

class Answers {
  final List<Answer> answers;

  factory Answers.fromJson(Map<String, dynamic> json) {
    List answers = [];
    for (String question in json.keys)
      answers.add(Answer(question, json[key]));
    return Answers(answers);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM