Swift 4 - Как структурировать объект json и использовать декодируемый в переключателе (не работает)

Я пытаюсь создать структуру для следующего объекта json, используя быстрое декодирование.

{
    "template": [

            {
                "id": 8,
                "question": "Favorite Color?",
                "category": "Color",
                "section": "Favorite Colors",
                "is_active": 1,
            },
            [
                {
                    "id": 14,
                    "question_id": 8,
                    "option_name": "Red",
                    "is_active": 1,
                },
                {
                    "id": 16,
                    "question_id": 8,
                    "option_name": "Orange",
                    "is_active": 1,

                }
            ],
            {
                "id": 9,
                "question": "What cars do you drive?",
                "category": "Cars",
                "section": "Favorite Cars",
                "is_active": 1,

            },
            [
                {
                    "id": 15,
                    "question_id": 9,
                    "option_name": "Toyota",
                    "is_active": 1,
                },
                {
                    "id": 18,
                    "question_id": 9,
                    "option_name": "Honda",
                    "is_active": 1,

                },
                {
                    "id": 19,
                    "question_id": 9,
                    "option_name": "BMW",
                    "is_active": 1,

                }
            ]
        ]

}

У меня есть такие:

public struct GameTemplate:Decodable {
 question:String?
}
 public struct Game:Decodable {
  let template[GameTemplate]
}

По какой-то причине, когда я пытался проанализировать это, я получаю сообщение об ошибке, в котором говорится, что структура не является словарем. Я попытался привести значение структуры, но это тоже не сработало, просто нужно получить красивый и чистый объект json после декодирования.


person user1533578    schedule 23.10.2018    source источник


Ответы (1)


ваш формат JSON несовместим.

Просто возьмите первую категорию color :

{
"template": [

        {
            "id": 8,
            "question": "Favorite Color?",
            "category": "Color",
            "section": "Favorite Colors",
            "is_active": 1,
        },
        [
            {
                "id": 14,
                "question_id": 8,
                "option_name": "Red",
                "is_active": 1,
            },
            {
                "id": 16,
                "question_id": 8,
                "option_name": "Orange",
                "is_active": 1,

            }
        ],
    ]
}

template - это array, имеющий dictionary по индексу 0 и массив по индексу 1. Это декодируется по-другому, но это дополнительные усилия.

Если возможно, сделайте данные JSON согласованными и клубными категориями в одном индексе массива как:

{
"template": [

        {
            "id": 8,
            "question": "Favorite Color?",
            "category": "Color",
            "section": "Favorite Colors",
            "is_active": 1,
            "subCategory": [
                       {
                          "id": 14,
                          "question_id": 8,
                          "option_name": "Red",
                          "is_active": 1,
                       },
                       {
                          "id": 16,
                          "question_id": 8,
                          "option_name": "Orange",
                          "is_active": 1,

                       }
              ]
          }
    ]
}

и так же клуб разных категорий автомобилей.

Вам будет легко расшифровать как:

public struct GameTemplate:Decodable {
    question: String?
    subCategory: [SubCategory]
}

public struct SubCategory:Decodable {
    option_name: String?
}

public struct Game:Decodable {
    let template: [GameTemplate]
}

Надеюсь, вы поняли, что я пытаюсь объяснить.

person Amit    schedule 23.10.2018
comment
Спасибо за ваш ответ. Как мне форматировать json, когда массив, создающий формат, подобен этому foreach($question-›where('subcategory','color')->get() as $q){ $values[] = ['question'= ›$q, 'subcategory' =› $option-›getOptionsWithQuestionID($q-›id)]; } - person user1533578; 23.10.2018