Ошибка синтаксического анализа json с помощью Swift4, его невозможно распечатать

#json #swift #decodable

#json #swift #декодируемый

Вопрос:

Я работал над Swift, и мой JSON невозможно разобрать. Я создал структуру с http://www.jsoncafe.com / , все выглядит великолепно, необязательные значения, ключи кодирования и т.д. Но я все время получаю эту ошибку.

Ошибка данных повреждена (Swift.Ошибка декодирования.Контекст(codingPath: [], debugDescription: «Данные данные были недопустимыми в формате JSON.», Лежащая в основе ошибка: необязательно(ошибка домена = NSCocoaErrorDomain Code = 3840 «Текст JSON не начинался с массива или объекта, и опция, позволяющая не устанавливать фрагменты». userInfo={NSDebugDescription= Текст JSON не начинался с массива или объекта, и опция разрешить фрагменты не установлена.})))

Это мой код.

 func fetchData() {
    guard let gitUrl = URL(string: "https://www.zaragoza.es/sede/servicio/farmacia.json?tipo=guardia") else { return }
    URLSession.shared.dataTask(with: gitUrl) { (data, response
        , error) in
        guard let data = data else { return }
        do {
            let decoder = JSONDecoder()
            let guardia = try decoder.decode([Result].self, from: data)
            print(guardia.first?.title as Any)

        } catch let err {
            print("Error", err)
        }
        }.resume()

}
  

JSON:

     { "totalCount": 12, 
"start": 0,
  "rows": 50,
  "icon": "farmaciaguardia",
  "result": [
    {
      "id": 8747,
      "title": "Farmacia De Miguel Golvano, Cristóbal",
      "telefonos": "976220481",
      "horario": "Lunes a Sábado excepto festivos de 9:30 a 22:00 h",
      "clasificacion": "HorarioAmpliado",
      "calle": "Pº de Sagasta, 13",
      "geometry": {
        "type": "Point",
        "coordinates": [
          -0.8857963286144336,
          41.643332650243835
        ]
      },
      "guardia": {
        "fecha": "2019-04-20T00:00:00Z",
        "turno": "T-05",
        "horario": "Abiertas de 9:15 h. a 9:15 h. del día siguiente",
        "sector": "Sector Centro-Esquina C/ Bolonia"
      },
      "type": [
        "http://www.zaragoza.es/sede/portal/skos/vocab/FarmaciaGuardia/2019-04-20",
        "http://www.zaragoza.es/sede/portal/skos/vocab/FarmaciaHorarioAmpliado"
      ]
    }]}
  

Комментарии:

1. Можете ли вы поделиться структурой JSON, пожалуйста?

2. Ошибка кажется вполне понятной.

3. Ананд, у тебя есть JSON, это структура, кроме того, URL-адрес есть в коде, потому что ответ JSON довольно длинный. Уверен, что ошибка понятна… но не для меня… Я проверил всю информацию, но все время ничего не получаю, даже используя quitcktype или jsoncafe, это причина, по которой я теперь, когда созданы отличные структуры, и проблема заключается в вызове JSON, и как я реализую код для получения значений, но я не знаю другого способа..

Ответ №1:

Наконец-то понял. Существует проблема с заголовками. Это и есть ответ. Большое спасибо.

 func fetchData() {

            let url = URL(string: "https://www.zaragoza.es/sede/servicio/farmacia.json?tipo=guardia")
        var request = URLRequest(url: url!)
        request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")  // the request is JSON
        request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Accept")
        let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
                do {
                    let jsonDecoder = JSONDecoder()
                    let responseModel = try jsonDecoder.decode(Result.self, from: data!)
                    print(responseModel)
                } catch {
                    print("Error: (error.localizedDescription)")
                }

            }
            task.resume()

    }
  

Ответ №2:

Вы сообщаете декодеру, что в вашем ответе JSON есть элемент верхнего уровня массива, но это не так. Массив находится во вложенном свойстве с именем result . Вам нужно создать что-то вроде

 struct ResultToDecode: Decodable {
   let result: [Result]
}
  

Комментарии:

1. Привет, я понял. Все декодируемые структуры, как я уже сказал, я создал их в jsoncafe.com Я пытался вызвать все способы, которые я видел во всех примерах, которые я нашел, но ничего не работает.