簡體   English   中英

SWIFT - JSON 錯誤:無法讀取數據,因為它的格式不正確

[英]SWIFT - JSON error: The data couldn’t be read because it isn’t in the correct format

如何更正此錯誤:JSON 錯誤:無法讀取數據,因為它的格式不正確?

struct LanguageText: Decodable {
    let id_language: Int
    let language_text: String
}

func textLoad() {
    let switchcase = "loginWords"
    var request = URLRequest(url: url)
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
    request.httpMethod = "POST"
    let postString = "switchcase=\(switchcase)"
    request.httpBody = postString.data(using: .utf8)

    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        guard let data = data, error == nil else {
            return // check for fundamental networking error
        }

        do {
            let json = try JSONSerialization.jsonObject(with: data, options: [])
                print(json)
        } catch {
            print("JSON error: \(error.localizedDescription)")
        }

    }.resume()
}

這是 JSON 格式:

[{"id_language":"15","language_text":"Female"},
 {"id_language":"16","language_text":"Male"},
 {"id_language":"17","language_text":"Other"},
 {"id_language":"1000","language_text":"Hello there!"}]

謝謝!

您正在嘗試將 id_language 放入 Int-Value 中,但在您的 JSON 中 id_language 是字符串。

將 id_language 更改為字符串

struct LanguageText: Decodable {
    let id_language: String
    let language_text: String
}

或者你必須編輯你的 JSON 文件

[{"id_language":15,"language_text":"Female"},
 {"id_language":16,"language_text":"Male"},
 {"id_language":17,"language_text":"Other"},
 {"id_language":1000,"language_text":"Hello there!"}]

對於解析 JSON 我可以推薦這個網站

在您的模型中,您可以執行以下操作:

struct LanguageText: Decodable {
  let languageId: String
  let languageText: String

  enum CodingKeys: String, CodingKey {
    case languageId = "id_language"
    case languageText = "language_text"
  }
}

在你的do catch中做data解析:

do {
  let result = try JSONDecoder().decode([LanguageText].self, from: data)
} catch {
  print("JSON error: \(error.localizedDescription)")
}

使用它從行數據中獲取數組。

  let dataArray = getArrayFromJsonString(rowData: data)

  func getArrayFromJsonString(arrayString:String)-> [[String : Any]] {
    do {
        return try  JSONSerialization.jsonObject(with: 
        arrayString.data(using:
        String.Encoding.utf8, allowLossyConversion: false)!, 
        options:
        JSONSerialization.ReadingOptions.allowFragments) as! [[String :
                Any]]
    } catch let error {
        print("Error: \(error)")
        return []
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM