Swift 5 Json ошибка разбора "dataCorrupted" - PullRequest
0 голосов
/ 02 апреля 2020

Я испробовал каждое решение, но ни одно из них не помогло решить мою проблему: ошибка при анализе Кто-нибудь может найти ошибку в этом коде

Ошибка сериализации json: dataCorrupted (Swift.DecodingError.Context (codingPath: [], debugDescription: «Указанные данные были недействительными JSON.», лежащие в основе: Ошибка: Необязательно (Ошибка Domain = NSCocoaErrorDomain Code = 3840 "Невозможно преобразовать данные в строку вокруг символа 2643." UserInfo = {NSDebugDescription = Невозможно преобразовать данные в строку вокруг символа 2643.})))

struct Facts:Codable {
    let title: String
    let rows: [Rows]
}
struct Rows:Codable {
    var title: String
    var description: String
    var imageHref: String
}


class ViewController: UIViewController {


    override func viewDidLoad() {
        super.viewDidLoad()

        let jsonUrlString = "https://dl.dropboxusercontent.com/s/2iodh4vg0eortkl/facts.json"

        guard let url = URL(string: jsonUrlString) else{return}
        URLSession.shared.dataTask(with: url) { (data, response, error) in

            guard let data = data else { return }

            do{
                let facts = try JSONDecoder().decode(Facts.self, from: data)
                print(facts)

            }catch let jsonErr{
                print("Error serializing json:", jsonErr)
            }
        }.resume()

    }

}

1 Ответ

0 голосов
/ 04 апреля 2020

// проблема в типе ответа и кодировке. Это должно быть приложение / json и // unicode, но на самом деле это: // тип содержимого ответа: text / plain; кодировка = ISO-8859-1


struct Facts:Codable {
    let title: String
    let rows: [Rows]!
}
struct Rows:Codable {
    var title: String?
    var description: String?
    var imageHref: String?
}


class ViewController: UIViewController {


    override func viewDidLoad() {
        super.viewDidLoad()

        let jsonUrlString = "https://dl.dropboxusercontent.com/s/2iodh4vg0eortkl/facts.json"

        guard let url = URL(string: jsonUrlString) else{return}
//        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")        // the expected response is also JSON


        URLSession.shared.dataTask(with: url) { (data, response, error) in
        guard let data = data else { return }
        guard let string = String(data: data, encoding: String.Encoding.isoLatin1) else { return }
        guard let properData = string.data(using: .utf8, allowLossyConversion: true) else { return }
        do{
        let facts = try JSONDecoder().decode(Facts.self, from: properData)
        //dump(facts)
            print(facts.title)
            for row in facts.rows {
            print(row.title ?? "no title")
            print(row.description ?? "no description")
            print(row.imageHref ?? "no img url")
            print("---")



            }
        } catch let error {
        print(error)
        }
        }.resume()


    }

}    

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