Swift, как выразить JSON в структурах - PullRequest
0 голосов
/ 10 мая 2018

Я хочу выразить следующий JSON и преобразовать в быстрые структуры
1) Я получаю сообщение об ошибке в третьей строке full_plan "Запятая отсутствует". Я не знаю, зачем нужна запятая? Мне нужна помощь, чтобы исправить это 2) Если это будет исправлено, будет ли структура, показанная ниже, точно преобразована в JSON?

Обратите внимание: для некоторых планов в JSON могут отсутствовать надстройки, поэтому во втором показанном плане надстройки отсутствуют.

В основном я прошу помочь исправить JSON и структуру для swift.

{ 
    "id": "100",

    "plans":
    [
        "full_plan":
        {       
            "plan":
            [
                { "plan_type": "Legacy" },
                { "contract_duration_months": "12" }
            ],
            "add_ons" :
            [
                { "parking": "yes"},
                { "washerDryer": "no" }
            ]
        },
        "full_plan":
        {
            "plan":
            [
                { "plan_type": "New" },
                { "contract_duration_months": "0" }
            ]
        }
    ]
}

 struct TopPlan : Decodable {
        var uniqueId: String?
        var Plans: [FullPlan]?
        enum CodingKeys : String, CodingKey {
            case uniqueId = "id"
            case Plans = "plans"
        }
    }
    struct FullPlan: Decodable {
        var Plan: PlanJSON?
        var freePlan: AddOnsJSON?
        enum CodingKeys : String, CodingKey {
            case pricedPlan = "plan"
            case freePlan = "add_ons"
        }
    }
    struct PlanJSON: Decodable {
        var planType: String?
        var duration: String?
        enum CodingKeys : String, CodingKey {
            case planType = "plan_type"
            case duration = "contract_duration_months"
        }
    }
    struct AddOnsJSON: Decodable {
        var parking: String?
        var washerDryer: String?
        enum CodingKeys : String, CodingKey {
            case parking = "parking"
            case washerDryer = "washerDryer"
        }
    }

Ответы [ 2 ]

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

Вы должны построить это снизу (и если вы разместите свой вопрос в форме, которая выполняется на игровой площадке, вы получите ответы быстрее). В вашем нынешнем виде plan JSON вызывает сожаление. Ваш struct утверждает, что вы хотите хеш, и вы предоставляете ему массив хешей (которые должны быть объединены, чтобы получить то, что вы хотите). Попробуйте это так:

import Cocoa

let jsonData = """
{ "plan_type": "Legacy",
  "contract_duration_months": "12"
}
""".data(using: .utf8)!

struct PlanJSON: Decodable {
    var planType: String?
    var duration: String?
    enum CodingKeys : String, CodingKey {
        case planType = "plan_type"
        case duration = "contract_duration_months"
    }
}

do {
    let plan = try JSONDecoder().decode(PlanJSON.self, from: jsonData)
    print(plan)
} catch {
    print(error)
}

Таким образом, вам будет предоставлено достаточно информации для дальнейшего исправления вашего JSON, но все остальное выглядит нормально.

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

Краткий ответ: ваш текущий JSON неверный синтаксис.

Вы используете "full_plan" в качестве ключа (что было бы хорошо, если бы "планы" были объектом) внутри массива. Массивы в JavaScript (и, следовательно, в JSON) не помечены. Вы должны либо удалить «full_plan» и просто использовать объект, на который он ссылается, например "plans": [{}, {}, etc], либо, если вам нужно сохранить ключ объекта, оберните весь элемент в фигурные скобки, такие как "plans": [{ "full_plan": {}}, { "full_plan": {}}, etc]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...