почему JSONDecoder дает typeMismatch для действительного json

Я использую JSONDecoder для преобразования JSON в объекты.

Вот код. Обычно работает нормально.

         do{
                print("Hi")
                       if Data != nil{
                        let model =  try JSONDecoder().decode(Base.self, from: Data!)
                       }
            }
            catch{
                print("Error:\(error)")
            }

Но я получаю ошибку ниже

Ошибка: typeMismatch (Swift.Double, Swift.DecodingError.Context (codingPath: [CodingKeys (stringValue: «rod», intValue: nil), CodingKeys (stringValue: «nod», intValue: nil), _JSONKey (stringValue: «Index 0 ", intValue: 0), CodingKeys (stringValue:" meta ", intValue: nil), CodingKeys (stringValue:" label ", intValue: nil)], debugDescription:" Ожидается декодирование Double, но вместо этого обнаружена строка / данные ". , belowError: nil))

Раньше все работало нормально. Любая помощь в решении этой проблемы будет оценена


person Naveen    schedule 28.03.2020    source источник
comment
Пожалуйста, внимательно прочтите сообщение об ошибке. Это довольно ясно. Значение для ключа label в словаре meta в первом элементе массива nod в словаре rod является String, а не ожидаемым Double.   -  person vadian    schedule 28.03.2020


Ответы (1)


Проблема, похоже, связана с типом данных.

Вам необходимо изучить Decodable protocol в JSONDecoder (). Decode, который в вашем случае

Base.self

По сути, одним из членов мета-класса / структуры является Double, в то время как он должен быть String.

Я не занимаюсь рекламой, но лично мне кажется, что https://app.quicktype.io/ легко использовать, и в большинстве случаев это безошибочно, когда дело доходит до создания протокола Decodable для любого JSON.

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

person Durai Amuthan.H    schedule 28.03.2020