【问题标题】:Place JSON data in label in Swift [duplicate]将 JSON 数据放在 Swift 中的标签中 [重复]
【发布时间】:2019-09-09 03:58:39
【问题描述】:

我能够通过 GET 方法捕获我的数据。但我想在标签中显示我的数据

if let data = data, let dataString = String(data: data, encoding: .utf8) {

      print("data: \(dataString)")
}

dataString 显示

data: {"data":{"id":1,"user_id":1,"month":9,"date":"2019-09-09 10:48:50","time_in":"09:00:00","time_out":"18:00:00","attendance":"\u25cf","reason":null,"estimated_time":null,"created_at":"2019-08-30 09:56:31","updated_at":"2019-09-09 10:49:48","deleted_at":null}}

我想获取“time_in”和“time_out”的值并在标签中显示

【问题讨论】:

  • 您需要解析 JSON 数据,而不是将其转换为字符串。在 Swift 中解析 JSON 的教程和示例数不胜数。请尝试一下,并尝试解析 JSON 并提取所需的值来更新您的问题。
  • 你得到的数据是JSON。您不应该将其转换为字符串。

标签: ios json swift


【解决方案1】:

尝试使用 Codable 来解析 JSON 响应。

创建模型,例如,

struct Root: Decodable {
    let data: Response
}

struct Response: Decodable {
    let timeIn: String
    let timeOut: String
}

现在解析您的 JSON 数据,例如,

if let data = data {
    do {
        let decoder = JSONDecoder()
        decoder.keyDecodingStrategy = .convertFromSnakeCase
        let response = try decoder.decode(Root.self, from: data)
        print(response)
    } catch {
        print(error)
    }
}

使用response 之类的方法获取timeIntimeOut 值,

let timeIn = response.data.timeIn
let timeOut = response.data.timeOut

您可以在您的label's text 中使用这些timeIntimeOut 值。

【讨论】:

  • 谢谢。我现在开始工作了,我只是错过了有关可解码的部分
  • 为什么将String更改为Int时会出错?我在 Int 中有回复。我不断收到“ketNotFound”错误
  • 您给出的 JSON 响应是字符串。添加您收到的 JSON 响应。
  • 我在名为员工 ID 的 JSON 响应中有一个额外的 int,我将其添加到结构中为 let empID: Int,但返回一个错误,显示为 keyNotFound(CodingKeys(stringValue: "emp_no", intValue: nil)
  • 您添加的 JSON 响应中没有类似 empID 或 emp_no 的内容。请更新 JSON,以便我告诉你真正的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-04
  • 2019-01-13
  • 2016-08-31
  • 1970-01-01
  • 2019-04-01
  • 2019-03-06
  • 1970-01-01
相关资源
最近更新 更多