【问题标题】:how to create a codable structure for the following API data如何为以下 API 数据创建可编码结构
【发布时间】:2020-10-05 10:51:21
【问题描述】:
{
    "status": true,
    "error": false,
    "data": [
        {
            "type": 0,
            "title": "",
            "description": "",
            "data": [
                {
                    "images": "/media/banner/Glocart%20Shop/Glocart-Shop_moVB3tP.jpg",
                    "is_external": true,
                    "link": "https://www.wikipedia.org/",
                    "product_id": null,
                    "offer_list_id": null,
                    "product_list_id": null
                },
                {
                    "images": "/media/banner/Grocery/Grocery_m341Az6.jpg",
                    "is_external": false,
                    "link": null,
                    "product_id": null,
                    "offer_list_id": 1,
                    "product_list_id": null
                }
            ]
        },
        {
            "type": 1,
            "title": "Categories",
            "description": "",
            "data": [
                {
                    "category_name": "Beverages",
                    "category_id": 5,
                    "category_icon": "/media/category_icon_upload_location/61ho157I07L._SX522__WpWCZ7h.jpg"
                },
                {
                    "category_name": "Tea & Coffee",
                    "category_id": 6,
                    "category_icon": "/media/category_icon_upload_location/Lipton-Green-Tea-Bags-250-SDL859816919-1-31762.jpg"
                },
                {
                    "category_name": "Body Care",
                    "category_id": 3,
                    "category_icon": "/media/category_icon_upload_location/nourishing-body-lotion-100ml_1024x1024.png"
                },
                {
                    "category_name": "Personal Hygiene",
                    "category_id": 7,
                    "category_icon": "/media/category_icon_upload_location/lif0259_2_1.jpg"
                },
                {
                    "category_name": "Jams & Preserves",
                    "category_id": 32,
                    "category_icon": "/media/category_icon_upload_location/kissan-mixed-fruit-jam-500-gm-164390973-ymzpr.jpg"
                },
                {
                    "category_name": "Air Fresheners",
                    "category_id": 28,
                    "category_icon": "/media/category_icon_upload_location/Godrej_Aer_Home_Air_Freshener_Spray_Morning_Misty_Meadows__fkCoOzL.jpg"
                },
                {
                    "category_name": "Chocolate",
                    "category_id": 35,
                    "category_icon": "/media/category_icon_upload_location/71p5hUVC0eL._SX569_.jpg"
                },
                {
                    "category_name": "Cosmetics & Makeup",
                    "category_id": 27,
                    "category_icon": "/media/category_icon_upload_location/81oA3GcTyRL._SL1500_.jpg"
                },
                {
                    "category_name": "Personal care",
                    "category_id": 26,
                    "category_icon": "/media/category_icon_upload_location/gillette-guard-3-card-blade-pack_rixer.png"
                }
            ]
        },
        {
            "type": 2,
            "title": "Fresh Deals",
            "description": "Today's Arrival",
            "data": [
                {
                    "product_id": 193,
                    "image_url": "/media/product_images/61XJQZV8YxL._SX425_.jpg",
                    "product_name": "UNILEVER KSN PINEAPPLE SQH 750ML-RS.15 PRICE OFF",
                    "offer_price": 14500,
                    "normal_price": 15500,
                    "is_in_cart": false,
                    "cart_qty": 0
                },
                {
                    "product_id": 193,
                    "image_url": "/media/product_images/61XJQZV8YxL._SX425_.jpg",
                    "product_name": "UNILEVER KSN PINEAPPLE SQH 750ML-RS.15 PRICE OFF",
                    "offer_price": 14500,
                    "normal_price": 15500,
                    "is_in_cart": false,
                    "cart_qty": 0
                },
                {
                    "product_id": 193,
                    "image_url": "/media/product_images/61XJQZV8YxL._SX425_.jpg",
                    "product_name": "UNILEVER KSN PINEAPPLE SQH 750ML-RS.15 PRICE OFF",
                    "offer_price": 14500,
                    "normal_price": 15500,
                    "is_in_cart": false,
                    "cart_qty": 0
                }
            ]
        },
        {
            "type": 3,
            "title": "",
            "description": "",
            "data": [
                {
                    "images": "/media/banner/Glocart%20Shop/Glocart-Shop_moVB3tP.jpg",
                    "is_external": true,
                    "link": "https://www.wikipedia.org/",
                    "product_id": null,
                    "offer_list_id": null,
                    "product_list_id": null
                },
                {
                    "images": "/media/banner/Glocart%20Shop/Glocart-Shop_moVB3tP.jpg",
                    "is_external": true,
                    "link": "https://www.wikipedia.org/",
                    "product_id": null,
                    "offer_list_id": null,
                    "product_list_id": null
                }
            ]
        },
        {
            "type": 4,
            "title": "",
            "description": "",
            "data": [
                {
                    "images": "/media/banner/Glocart%20Shop/Glocart-Shop_moVB3tP.jpg",
                    "is_external": true,
                    "link": null,
                    "product_id": null,
                    "offer_list_id": null,
                    "product_list_id": null
                }
            ]
        },
        {
            "type": 5,
            "title": "Discount Range",
            "description": "",
            "data": [
                {
                    "banner": "/media/product_images/61XJQZV8YxL._SX425_.jpg",
                    "discount_from": 50,
                    "discount_to": 60
                },
                {
                    "banner": "/media/product_images/61XJQZV8YxL._SX425_.jpg",
                    "discount_from": 40,
                    "discount_to": 100
                }
            ]
        },
        {
            "type": 2,
            "title": "Top Deals",
            "description": "Upto 45% discount",
            "data": [
                {
                    "product_id": 193,
                    "image_url": "/media/product_images/61XJQZV8YxL._SX425_.jpg",
                    "product_name": "UNILEVER KSN PINEAPPLE SQH 750ML-RS.15 PRICE OFF",
                    "offer_price": 14500,
                    "normal_price": 15500,
                    "is_in_cart": false,
                    "cart_qty": 0
                },
                {
                    "product_id": 193,
                    "image_url": "/media/product_images/61XJQZV8YxL._SX425_.jpg",
                    "product_name": "UNILEVER KSN PINEAPPLE SQH 750ML-RS.15 PRICE OFF",
                    "offer_price": 14500,
                    "normal_price": 15500,
                    "is_in_cart": false,
                    "cart_qty": 0
                },
                {
                    "product_id": 193,
                    "image_url": "/media/product_images/61XJQZV8YxL._SX425_.jpg",
                    "product_name": "UNILEVER KSN PINEAPPLE SQH 750ML-RS.15 PRICE OFF",
                    "offer_price": 14500,
                    "normal_price": 15500,
                    "is_in_cart": false,
                    "cart_qty": 0
                }
            ]
        },
        {
            "type": 0,
            "title": "",
            "description": "",
            "data": {
                "images": "/media/banner/Glocart%20Shop/Glocart-Shop_moVB3tP.jpg",
                "is_external": true,
                "link": "https://www.wikipedia.org/",
                "product_id": null,
                "offer_list_id": null,
                "product_list_id": null
            }
        },
        {
            "type": 6,
            "title": "Suggested for you",
            "description": "",
            "data": [
                {
                    "product_id": 193,
                    "image_url": "/media/product_images/61XJQZV8YxL._SX425_.jpg",
                    "product_name": "UNILEVER KSN PINEAPPLE SQH 750ML-RS.15 PRICE OFF",
                    "offer_price": 14500,
                    "normal_price": 15500,
                    "is_in_cart": false,
                    "cart_qty": 0
                },
                {
                    "product_id": 193,
                    "image_url": "/media/product_images/61XJQZV8YxL._SX425_.jpg",
                    "product_name": "UNILEVER KSN PINEAPPLE SQH 750ML-RS.15 PRICE OFF",
                    "offer_price": 14500,
                    "normal_price": 15500,
                    "is_in_cart": false,
                    "cart_qty": 0
                },
                {
                    "product_id": 193,
                    "image_url": "/media/product_images/61XJQZV8YxL._SX425_.jpg",
                    "product_name": "UNILEVER KSN PINEAPPLE SQH 750ML-RS.15 PRICE OFF",
                    "offer_price": 14500,
                    "normal_price": 15500,
                    "is_in_cart": false,
                    "cart_qty": 0
                }
            ]
        },
        {
            "type": 0,
            "title": "",
            "description": "",
            "data": {
                "images": "/media/banner/Grocery/Grocery_m341Az6.jpg",
                "is_external": false,
                "link": null,
                "product_id": null,
                "offer_list_id": 1,
                "product_list_id": null
            }
        },
        {
            "type": 7,
            "title": "",
            "description": "",
            "data": [
                {
                    "banner": "/media/product_images/61XJQZV8YxL._SX425_.jpg",
                    "category_name": "Personal Care",
                    "category_id": 1,
                    "have_sub_category": true,
                    "sub_categories": [
                        {
                            "category_name": "Chocolate",
                            "category_id": 35,
                            "category_icon": "/media/category_icon_upload_location/71p5hUVC0eL._SX569_.jpg"
                        },
                        {
                            "category_name": "Chocolate",
                            "category_id": 35,
                            "category_icon": "/media/category_icon_upload_location/71p5hUVC0eL._SX569_.jpg"
                        }
                    ]
                }
            ]
        },
        {
            "type": 7,
            "title": "",
            "description": "",
            "data": [
                {
                    "banner": "/media/product_images/61XJQZV8YxL._SX425_.jpg",
                    "category_name": "Beauty Care",
                    "category_id": 2,
                    "have_sub_category": false,
                    "sub_categories": []
                }
            ]
        },
        {
            "type": 7,
            "title": "",
            "description": "",
            "data": [
                {
                    "banner": "/media/product_images/61XJQZV8YxL._SX425_.jpg",
                    "category_name": "Home Care",
                    "category_id": 3,
                    "have_sub_category": false,
                    "sub_categories": []
                }
            ]
        }
    ],
    "cart_items_count": 5,
    "total_cart_price": 30000,
    "is_authenticated": true,
    "new_notification_count": 1,
    "cash_back_msg": "Dummy Cash Back message"
}

我创建了一个..但显示错误

struct Home2Response: Codable {
    var status, error: Bool?
    var data: [Home2ResponseDatum]?
    var cartItemsCount, totalCartPrice: Int?
    var isAuthenticated: Bool?
    var newNotificationCount: Int?
    var cashBackMsg: String?

    enum CodingKeys: String, CodingKey {
        case status, error, data
        case cartItemsCount = "cart_items_count"
        case totalCartPrice = "total_cart_price"
        case isAuthenticated = "is_authenticated"
        case newNotificationCount = "new_notification_count"
        case cashBackMsg = "cash_back_msg"
    }
}

// MARK: - Home2ResponseDatum
struct Home2ResponseDatum: Codable {
    var type: Int?
    var title: String?
    var datumDescription: String?
    var data: [Any]?

    enum CodingKeys: String, CodingKey {
        case type, title
        case datumDescription = "description"
        case data
    }
}

【问题讨论】:

  • 您不能将AnyCodable 一起使用。为 data Array 使用特定类型,不要使用 Any
  • data 的合理解决方案是一个枚举,其关联类型取决于 type
  • 你可能想看看app.quicktype.io
  • 在线发帖提示:“.but 显示错误” 什么错误?显示错误,以及哪一行。您应该有更快的答案,我们不必阅读所有内容,并找出小错误

标签: ios json swift codable


【解决方案1】:

JSON 中的名称应与struct 中的名称匹配。 将 datumDescription 更改为描述。

struct Data : Codable {
    let type : Int?
    let title : String?
    let description : String?
    let data : [Data]?

【讨论】:

  • OP 使用 CodingKey 枚举,所以这不是问题。
猜你喜欢
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
相关资源
最近更新 更多