Расшифровка вложенного JSON Swift - PullRequest
0 голосов
/ 06 мая 2018

Мне нужно войти в логотип - оригинал - URL. Возникли проблемы с правильным синтаксисом. вот 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 голосов
/ 06 мая 2018

Если вам нужен только логотип - оригинал - 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
}

И печатать URL-адреса во всех событиях с помощью

let result = try JSONDecoder().decode(Eventbrite.self, from: data)
for event in result.events {
    print(event.logo.original.url)
}

Кажется, вы все еще не понимаете структуру словаря отношений <->. Вам предлагается научиться этому ?

И объявляйте членов структуры только как необязательные, если вы получаете соответствующие сообщения об ошибках.

0 голосов
/ 06 мая 2018

Изменить это

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...