解码嵌套的JSON swift

时间:2018-05-06 04:41:26

标签: json swift

我需要进入徽标 - 原始 - 网址。在解决语法问题时遇到问题。这是JSON。我确定这是一个小的语法错误,但帮助将不胜感激谢谢。我认为问题在于我创建了Logo的结构 - 我觉得“原始”应该是一个字典,但是当我两种方式都这样做时我会收到错误。

   {
    "pagination": {
        "page_number": 1, 
        "page_size": 50, 
        "continuation": "eyJwYWdlIjogMn0", 
        "has_more_items": true
    }, 
    "events": [
        {
            "name": {
                "text": "Atelier femmes entrepreneurs : Comprendre les leviers de la r\u00e9ussite", 
                "html": "Atelier femmes entrepreneurs : Comprendre les leviers de la r\u00e9ussite"
            }, 
            "description": {
                "text": "Matthieu Jardin offre aux femmes entrepreneurs un atelier d\u00e9velopper votre chiffre d\u2019affaires d\u2019une demi-journ\u00e9e.\nL\u2019atelier permet de d\u00e9couvrir des techniques marketing et commercial pour atteindre 150 000 \u20ac de chiffre d'affaire en 12 mois en ind\u00e9pendant (ou vous permettre de doubler ce chiffre d\u2019affaires si vous l\u2019avez d\u00e9j\u00e0 atteint).\nDepuis 10 ans, nous avons rencontr\u00e9 10 000 entrepreneurs permettant de comprendre les leviers de r\u00e9ussite d\u2019une activit\u00e9 professionnelle dans tous les domaines (sant\u00e9, beaut\u00e9, bien-\u00eatre, mieux-\u00eatre, m\u00e9decine douce, d\u00e9veloppement personnel, coaching, esth\u00e9tique, minceur, marketing, webmarketing, commercial, conseils, services, informatique, photographie, \u00e9dition, \u2026)Venez d\u00e9couvrir nos m\u00e9thodes \u00e0 succ\u00e8s, issue d\u2019une r\u00e9ussite manifeste puis\u00e9e au c\u0153ur de notre exp\u00e9rience.Sortez du lot mat\u00e9rialisez vos r\u00eaves et vibrez votre chiffre d\u2019affaires.", 
                "html": "<P>Matthieu Jardin offre aux <STRONG>femmes entrepreneurs<\/STRONG> un atelier d\u00e9velopper votre chiffre d\u2019affaires d\u2019une demi-journ\u00e9e.<\/P>\n<P>L\u2019atelier permet de d\u00e9couvrir des techniques marketing et commercial pour <STRONG>atteindre 150 000 \u20ac de chiffre d'affaire en 12 mois en ind\u00e9pendant<\/STRONG> (ou vous permettre de doubler ce chiffre d\u2019affaires si vous l\u2019avez d\u00e9j\u00e0 atteint).<\/P>\n<P><BR>Depuis 10 ans, nous avons rencontr\u00e9 <STRONG>10 000 entrepreneurs<\/STRONG> permettant de comprendre les leviers de r\u00e9ussite d\u2019une activit\u00e9 professionnelle dans tous les domaines (sant\u00e9, beaut\u00e9, bien-\u00eatre, mieux-\u00eatre, m\u00e9decine douce, d\u00e9veloppement personnel, coaching, esth\u00e9tique, minceur, marketing, webmarketing, commercial, conseils, services, informatique, photographie, \u00e9dition, \u2026)<BR><BR>Venez d\u00e9couvrir nos m\u00e9thodes \u00e0 succ\u00e8s, issue d\u2019une r\u00e9ussite manifeste puis\u00e9e au c\u0153ur de notre exp\u00e9rience.<BR><BR>Sortez du lot mat\u00e9rialisez vos r\u00eaves et <STRONG>vibrez votre chiffre d\u2019affaires.<\/STRONG><\/P>"
            }, 
            "id": "45831548395", 
            "url": "https://www.eventbrite.fr/e/billets-atelier-femmes-entrepreneurs-comprendre-les-leviers-de-la-reussite-45831548395", 
            "start": {
                "timezone": "Europe/Paris", 
                "local": "2018-12-20T10:00:00", 
                "utc": "2018-12-20T09:00:00Z"
            }, 
            "end": {
                "timezone": "Europe/Paris", 
                "local": "2018-12-20T12:00:00", 
                "utc": "2018-12-20T11:00:00Z"
            }, 
            "organization_id": "216426671512", 
            "created": "2018-05-05T21:03:44Z", 
            "changed": "2018-05-05T21:03:44Z", 
            "capacity": 500, 
            "capacity_is_custom": false, 
            "status": "live", 
            "currency": "EUR", 
            "listed": true, 
            "shareable": true, 
            "online_event": false, 
            "tx_time_limit": 480, 
            "hide_start_date": false, 
            "hide_end_date": false, 
            "locale": "fr_FR", 
            "is_locked": false, 
            "privacy_setting": "unlocked", 
            "is_series": true, 
            "is_series_parent": false, 
            "is_reserved_seating": false, 
            "show_pick_a_seat": false, 
            "show_seatmap_thumbnail": false, 
            "show_colors_in_seatmap_thumbnail": false, 
            "source": "create_2.0", 
            "is_free": true, 
            "version": "3.0.0", 
            "logo_id": "32865078", 
            "organizer_id": "14456692393", 
            "venue_id": "20195991", 
            "category_id": "101", 
            "subcategory_id": null, 
            "format_id": "9", 
            "resource_uri": "https://www.eventbriteapi.com/v3/events/45831548395/", 
            "series_id": "35835727626", 
            "logo": {
                "crop_mask": {
                    "top_left": {
                        "x": 0, 
                        "y": 0
                    }, 
                    "width": 2160, 
                    "height": 1080
                }, 
                "original": {
                    "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F32865078%2F216426671512%2F1%2Foriginal.jpg?auto=compress&s=90b9b081469d121ff3b446365c02865b", 
                    "width": 2160, 
                    "height": 1080
                }, 
                "id": "32865078", 
                "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F32865078%2F216426671512%2F1%2Foriginal.jpg?h=200&w=450&auto=compress&rect=0%2C0%2C2160%2C1080&s=9989b1febf7b1317555501973300a8f1", 
                "aspect_ratio": "2", 
                "edge_color": null, 
                "edge_color_set": true
            }
        },

这是我的可解码代码

struct Eventbrite: Decodable {
    let events: [Event]

}

struct Event: Decodable {
    let name: Name
    let description: Description
    let start: Start
    let logo: Logo
}

struct Name : Decodable {
    let text, html : String
}

struct Description : Decodable {
    let text : String?
}

struct Start : Decodable {
    let timezone, local, utc : String

}

struct Logo: Decodable{
    let original: String?
}

struct Original: Decodable{
    let url: String?
}

2 个答案:

答案 0 :(得分:1)

如果你只需要 logo - original - url 这就足够了

struct Eventbrite: Decodable {
    let events: [Event]
}

struct Event: Decodable {
    let logo: Logo
}

struct Logo: Decodable {
    let original: Original // note that the type is not `String`
}

struct Original: Decodable {
    let url: URL
}

使用

打印所有活动中的网址
let result = try JSONDecoder().decode(Eventbrite.self, from: data)
for event in result.events {
    print(event.logo.original.url)
}

您似乎仍然不理解关系词典&lt; - &gt;结构。我们鼓励你学习它

如果您收到相应的错误消息,则仅将struct成员声明为可选。

答案 1 :(得分:0)

更改此

struct Logo: Decodable{
    let original: String?
}

struct Logo: Decodable{
    let original: Original?
}

这是完整的代码

import Foundation

struct Eventbrite: Codable {
    let events: [Event]
}

// MARK: Convenience initializers

extension Eventbrite {
    init(data: Data) throws {
        self = try JSONDecoder().decode(Eventbrite.self, from: data)
    }
}


struct Event: Codable {
    let name, description: Description
    let start : Start
    let logo: Logo

    enum CodingKeys: String, CodingKey {
        case name, description, logo, start
    }
}

struct Description: Codable {
    let text, html: String
}

struct Start: Codable {
    let timezone, local, utc: String
}

struct Logo: Codable {
    let cropMask: CropMask
    let original: Original
    let id, url, aspectRatio: String
    let edgeColorSet: Bool

    enum CodingKeys: String, CodingKey {
        case cropMask = "crop_mask"
        case original, id, url
        case aspectRatio = "aspect_ratio"
        case edgeColorSet = "edge_color_set"
    }
}

struct CropMask: Codable {
    let topLeft: TopLeft
    let width, height: Int

    enum CodingKeys: String, CodingKey {
        case topLeft = "top_left"
        case width, height
    }
}

struct TopLeft: Codable {
    let x, y: Int
}

struct Original: Codable {
    let url: String
    let width, height: Int
}