首页 > 解决方案 > 具有相同字段名称的非常​​复杂的 Json

问题描述

我的同事是后端开发的响应,这是 API 响应的示例之一。
我想知道如何将其与地图分开?
而且有同名,我很难处理。JSON 到 Dart 生成的代码也会有相同名称的错误案例。
有没有其他解决方案来处理这个 Json?

{
    "formId": 1,
    "formTypeId": 2,
    "formTemplateId": 1,
    "version": 1,
    "history": "N",
    "refNum": "AGQ/T01/01/A1/QA2/0001",
    "dateOfAcceptance": "2020/12/16 14:54:01",
    "dateOfReacceptance": "2020/12/16 14:54:01",
    "blockId": 242,
    "floorId": 1,
    "flatId": 98,
    "isPublic": "N",
    "locationId": 1,
    "fromFloorId": 1,
    "toFloorId": 2,
    "elevationId": 1,
    "isNextVendor": "Y",
    "isMultipleVendor": "N",
    "formStatusId": 1,
    "checkResults": 1,
    "submissionDate": "2020/12/16 14:54:01",
    "submittedBy": "ADMINISTRATOR",
    "siteId": "YLTL",
    "formDetails": [
        {
            "formDetailsId": 1,
            "formId": 1,
            "title": "A. 驗收項目",
            "checkType": 1,
            "required": "Y",
            "parentId": 0,
            "orderNum": 1,
            "formDetailsOptions": [],
            "fromDetails": [
                {
                    "formDetailsId": 3,
                    "formId": 1,
                    "title": "Title group",
                    "checkType": 2,
                    "required": "Y",
                    "parentId": 1,
                    "orderNum": 1,
                    "formDetailsOptions": [],
                    "fromDetails": [
                        {
                            "formDetailsId": 4,
                            "formId": 1,
                            "title": "門編號:",
                            "checkType": 5,
                            "required": "Y",
                            "parentId": 3,
                            "orderNum": 1,
                            "answerVal": "A001",
                            "formDetailsOptions": []
                        },
                        {
                            "formDetailsId": 5,
                            "formId": 1,
                            "title": "位置:",
                            "checkType": 6,
                            "required": "Y",
                            "parentId": 3,
                            "orderNum": 2,
                            "formDetailsOptions": [
                                {
                                    "formDetailsOptionsId": 1,
                                    "formDetailsId": 5,
                                    "orderNum": 1,
                                    "optionDesc": "單位大門",
                                    "defectOpts": "N",
                                    "additionOpts": "N",
                                    "selected": "N"
                                },
                                {
                                    "formDetailsOptionsId": 2,
                                    "formDetailsId": 5,
                                    "orderNum": 2,
                                    "optionDesc": "廚房門",
                                    "defectOpts": "N",
                                    "additionOpts": "N",
                                    "selected": "N"
                                },
                                {
                                    "formDetailsOptionsId": 3,
                                    "formDetailsId": 5,
                                    "orderNum": 3,
                                    "optionDesc": "廁所客廳",
                                    "defectOpts": "N",
                                    "additionOpts": "N",
                                    "selected": "N"
                                }
                            ]
                        },
                        {
                            "formDetailsId": 6,
                            "formId": 1,
                            "title": "假框抆塞:",
                            "checkType": 4,
                            "required": "Y",
                            "parentId": 3,
                            "orderNum": 3,
                            "answerVal": "Y",
                            "formDetailsOptions": []
                        },
                        {
                            "formDetailsId": 7,
                            "formId": 1,
                            "title": "門框尺寸:",
                            "checkType": 4,
                            "required": "Y",
                            "parentId": 3,
                            "orderNum": 4,
                            "answerVal": "Y",
                            "formDetailsOptions": []
                        },
                        {
                            "formDetailsId": 8,
                            "formId": 1,
                            "title": "門框木料:",
                            "checkType": 4,
                            "required": "Y",
                            "parentId": 3,
                            "orderNum": 5,
                            "answerVal": "Y",
                            "formDetailsOptions": []
                        },
                        {
                            "formDetailsId": 9,
                            "formId": 1,
                            "title": "門框接口:",
                            "checkType": 4,
                            "required": "Y",
                            "parentId": 3,
                            "orderNum": 6,
                            "answerVal": "Y",
                            "formDetailsOptions": []
                        },
                        {
                            "formDetailsId": 10,
                            "formId": 1,
                            "title": "門框色澤:",
                            "checkType": 4,
                            "required": "Y",
                            "parentId": 3,
                            "orderNum": 7,
                            "answerVal": "Y",
                            "formDetailsOptions": []
                        },
                        {
                            "formDetailsId": 11,
                            "formId": 1,
                            "title": "磨耳及蟻油:",
                            "checkType": 4,
                            "required": "Y",
                            "parentId": 3,
                            "orderNum": 8,
                            "answerVal": "Y",
                            "formDetailsOptions": []
                        },
                        {
                            "formDetailsId": 12,
                            "formId": 1,
                            "title": "防火膠條:",
                            "checkType": 4,
                            "required": "Y",
                            "parentId": 3,
                            "orderNum": 9,
                            "answerVal": "Y",
                            "formDetailsOptions": []
                        },
                        {
                            "formDetailsId": 13,
                            "formId": 1,
                            "title": "平正及穩固:",
                            "checkType": 4,
                            "required": "Y",
                            "parentId": 3,
                            "orderNum": 10,
                            "answerVal": "Y",
                            "formDetailsOptions": []
                        },
                        {
                            "formDetailsId": 14,
                            "formId": 1,
                            "title": "備註:",
                            "checkType": 7,
                            "required": "N",
                            "parentId": 3,
                            "orderNum": 11,
                            "answerVal": "Test group remark",
                            "formDetailsOptions": []
                        }
                    ]
                }
            ]
        },
        {
            "formDetailsId": 2,
            "formId": 1,
            "title": "B. 要改善位置及詳情備註:",
            "checkType": 1,
            "required": "Y",
            "parentId": 0,
            "orderNum": 2,
            "answerVal": "Test B remark",
            "formDetailsOptions": []
        }
    ],
    "formDefects": [
        {
            "formDefectsId": 1,
            "formId": 1,
            "defectRemark": "Test Remark",
            "followActionId": 1,
            "reporterType": 1,
            "formDefectsImgs": [
                {
                    "formDefectsImgId": 1,
                    "formDefectsId": 1,
                    "imgType": 1,
                    "filePath": "data/images/1/DEFECT-20201228150623123-2F3F4H.jpg",
                    "orderNum": 1
                }
            ]
        }
    ],
    "formVendors": [
        {
            "formVendorId": 2,
            "formId": 1,
            "vendorId": "3954",
            "orderNum": 2,
            "isNextVendor": "N",
            "formVendorImgs": [
                {
                    "formVendorImgId": 1,
                    "formVendorId": 2,
                    "filePath": "data/images/1/QUERY-20201228151423123-2FF2V4.png",
                    "orderNum": 1
                }
            ],
            "vendor": {
                "vendorId": "3954",
                "vendorDesc": "博西華",
                "vendorDescDisp": "BSH"
            }
        }
    ],
    "formNextVendors": [
        {
            "formVendorId": 1,
            "formId": 1,
            "vendorId": "3985",
            "orderNum": 1,
            "isNextVendor": "Y",
            "formVendorImgs": [
                {
                    "formVendorImgId": 2,
                    "formVendorId": 1,
                    "filePath": "data/images/1/QUERY-20201228151423123-VD5F5H.png",
                    "orderNum": 2
                }
            ],
            "vendor": {
                "vendorId": "3985",
                "vendorDesc": "瑞基",
                "vendorDescDisp": "Zuki"
            }
        }
    ]
}

标签: flutterdart

解决方案


如果你可以共享 Dart 模型,那么使用 json_serializable 包。那会让事情变得更容易。但...

...如果您必须接受您的同事开发的 JSON 响应并且您无法共享从/转换为 Json 的模型,则一种替代方法是使用https://app.quicktype.io/

我输入了你的 JSON 响应,生成的 Dart 代码至少乍一看似乎是合法的。

该代码生成的示例:

factory ComplexJson.fromJson(Map<String, dynamic> json) => ComplexJson(
    formId: json["formId"],
    formTypeId: json["formTypeId"],
    formTemplateId: json["formTemplateId"],
    version: json["version"],
    history: historyValues.map[json["history"]],
    refNum: json["refNum"],
    dateOfAcceptance: json["dateOfAcceptance"],
    dateOfReacceptance: json["dateOfReacceptance"],
    blockId: json["blockId"],
    floorId: json["floorId"],
    flatId: json["flatId"],
    isPublic: historyValues.map[json["isPublic"]],
    locationId: json["locationId"],
    fromFloorId: json["fromFloorId"],
    toFloorId: json["toFloorId"],
    elevationId: json["elevationId"],
    isNextVendor: historyValues.map[json["isNextVendor"]],
    isMultipleVendor: historyValues.map[json["isMultipleVendor"]],
    formStatusId: json["formStatusId"],
    checkResults: json["checkResults"],
    submissionDate: json["submissionDate"],
    submittedBy: json["submittedBy"],
    siteId: json["siteId"],
    formDetails: List<MDetail>.from(json["formDetails"].map((x) => MDetail.fromJson(x))),
    formDefects: List<FormDefect>.from(json["formDefects"].map((x) => FormDefect.fromJson(x))),
    formVendors: List<FormVendor>.from(json["formVendors"].map((x) => FormVendor.fromJson(x))),
    formNextVendors: List<FormVendor>.from(json["formNextVendors"].map((x) => FormVendor.fromJson(x))),
);

推荐阅读