Json 使用 Codable 在 swift 4.2 中解析

Json Parsing in swift 4.2 using Codable

我正在处理一个 project.I 从 API.Now 得到一个响应我想通过 JsonDecode().decod 函数获取该响应,结构使用可解码 class.

我已经制作了可编码结构,但它给了我这样的错误:

数据格式不正确,无法读取。

我的 API 回复是:

{
    auth = 1;
    data =     {
        "dealer_rating" =         {
            average = "3.5";
            "average_width" = "70%";
            count = 2;
            dislikes = 0;
            likes = 2;
            rate1 = 4;
            "rate1_label" = "Atenci\U00f3n al cliente";
            "rate1_width" = "80%";
            rate2 = "3.5";
            "rate2_label" = "Proceso de compra";
            "rate2_width" = "70%";
            rate3 = 3;
            "rate3_label" = "Experiencia general";
            "rate3_width" = "60%";
        };
        review =         (
                        {
                average = 3;
                "post_author" = 16;
                "post_content" = "Test of iOS developer.";
                "post_title" = "iOS Test";
                rate1 = 3;
                "rate1_label" = "Atenci\U00f3n al cliente";
                rate2 = 3;
                "rate2_label" = "Proceso de compra";
                rate3 = 3;
                "rate3_label" = "Experiencia general";
                "stm_recommended" = yes;
                username = "";
            },
                        {
                average = 4;
                "post_author" = 22;
                "post_content" = vvvvvvvvvv;
                "post_title" = vvvvvvvvvv;
                rate1 = 5;
                "rate1_label" = "Atenci\U00f3n al cliente";
                rate2 = 4;
                "rate2_label" = "Proceso de compra";
                rate3 = 3;
                "rate3_label" = "Experiencia general";
                "stm_recommended" = yes;
                username = Vnn;
            }
        );
    };
    message = "Review found.";
    status = 1;
}

我的可解码结构是:

struct resDelerReview : Codable {
    struct struDataString : Codable {
        var average:String?
        var rate1:Int
        var rate1_label:String?
        var rate2:Int
        var rate2_label:String?
        var rate3:Int
        var rate3_label:String?
        var likes:Int
        var dislikes:Int
        var count:Int
        var rate1_width:String?
        var rate2_width:String?
        var rate3_width:String?
        var average_width:String?
    }

    struct struReviewList : Codable {
        var post_author:String?
        var username:String?
        var post_content:String?
        var post_title:String?
        var rate1:String?
        var rate1_label:String?
        var rate2:String?
        var rate2_label:String?
        var rate3:String?
        var rate3_label:String?
        var stm_recommended:String?
        var average:Int
    }


    struct reviewRating : Codable {
        let dealer_rating:struDataString
        let review:[struReviewList]
    }

    let data:reviewRating
    let status:Bool
    let auth:Bool
    let message:String?
}

邮递员回复文本

{
    "data": {
        "dealer_rating": {
            "average": "3.5",
            "rate1": 4,
            "rate1_label": "Atención al cliente",
            "rate2": 3.5,
            "rate2_label": "Proceso de compra",
            "rate3": 3,
            "rate3_label": "Experiencia general",
            "likes": 2,
            "dislikes": 0,
            "count": 2,
            "rate1_width": "80%",
            "rate2_width": "70%",
            "rate3_width": "60%",
            "average_width": "70%"
        },
        "review": [
            {
                "post_author": "16",
                "username": "",
                "post_content": "Test of iOS developer.",
                "post_title": "iOS Test",
                "rate1": "3",
                "rate1_label": "Atención al cliente",
                "rate2": "3",
                "rate2_label": "Proceso de compra",
                "rate3": "3",
                "rate3_label": "Experiencia general",
                "stm_recommended": "yes",
                "average": 3
            },
            {
                "post_author": "22",
                "username": "Vnn",
                "post_content": "vvvvvvvvvv",
                "post_title": "vvvvvvvvvv",
                "rate1": "5",
                "rate1_label": "Atención al cliente",
                "rate2": "4",
                "rate2_label": "Proceso de compra",
                "rate3": "3",
                "rate3_label": "Experiencia general",
                "stm_recommended": "yes",
                "average": 4
            }
        ]
    },
    "status": true,
    "auth": true,
    "message": "Review found."
}

我的邮递员回复是:

请大家帮帮我,我卡住了。

提前致谢

如果你读完整个错误就很清楚了,它是 属性 rate2 被声明为 Int 但其中一个元素包含 3.5

所以在 struDataString 结构中将其更改为

var rate2: Double

注意 struDataString 中还有其他几个类似的字段,如 rate2,它们很可能包含双精度值以与另一个类似 rateX 字段。您可能想查看所有这些文件的文档