Разбор Json в Swift 4.2 с использованием Codable - PullRequest
0 голосов
/ 24 февраля 2019

Я работаю над одним проектом. Я получил один ответ от API. Теперь я хочу получить этот ответ через функцию JsonDecode (). Decod со структурой, использующей декодируемый класс.

Iсделали кодируемую структуру, но она выдает мне ошибку вроде:

Данные не могут быть прочитаны, потому что они не в правильном формате.

MyОтвет 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."
}

Мой ответ почтальона:

enter image description here

Пожалуйста, помогите мне, ребята, я застреваю.

Заранее спасибо

1 Ответ

0 голосов
/ 24 февраля 2019

Ошибка вполне понятна, если вы прочитаете ее полностью, это свойство rate2, которое объявлено как Int, но содержит 3,5 для одного из элементов

Так что измените его вstruDataString struct to

var rate2: Double

Примечание Есть несколько других похожих полей, таких как rate2 в struDataString, и очень вероятно, что они могут содержать двойные значения, подобные другим rateX полей.Возможно, вы захотите проверить документацию для всех из них

...