Ios 如何在Swift 4中解码JSON(JSON Web令牌)?
如何在Swift 4中使用解码器解码此json? 我希望能够自己获取“令牌”,以便将其存储在钥匙链中Ios 如何在Swift 4中解码JSON(JSON Web令牌)?,ios,json,swift,jwt,swift4,Ios,Json,Swift,Jwt,Swift4,如何在Swift 4中使用解码器解码此json? 我希望能够自己获取“令牌”,以便将其存储在钥匙链中 { "success":true, "token":"***" , "user": { "id": "59f0ec6d5479390345980cc8", "username": "john", "email": "john@gmail.com" } } 我试过这个,但它什么也印不出来 let session = URLSession.sha
{
"success":true,
"token":"***"
,
"user": {
"id": "59f0ec6d5479390345980cc8",
"username": "john",
"email": "john@gmail.com"
}
}
我试过这个,但它什么也印不出来
let session = URLSession.shared
let task = session.dataTask(with: request) { (data, _, _) in
guard let data = data else { return }
do {
let jsonwt = try JSONDecoder().decode(JWT.self, from: data)
print(jsonwt.token)
} catch {}
}
task.resume()
}
我可以把这个放在捕获之后,但这会得到整个json,我不希望这样
print(String(data: data, encoding: .utf8)!)
以下是结构。我认为这就是问题所在
struct User: Decodable {
let id: String
let username: String
let email: String
}
struct JWT: Decodable {
let success: String
let token: String
let user: User
}
下面是一些操场代码,演示了在Swift中解析JSON的代码:
//: Playground - noun: a place where people can play
import UIKit
import XCTest
import PlaygroundSupport
let json = """
{
"success":true,
"token":"***"
,
"user": {
"id": "59f0ec6d5479390345980cc8",
"username": "john",
"email": "john@gmail.com"
}
}
""".data(using: .utf8)!
do {
if let data = try JSONSerialization.jsonObject(with: json, options: .allowFragments) as? [String:Any], let token = data["token"] {
print("token is \(token)")
}
} catch _ {
print("Failed to decode JSON")
}
下面是一些操场代码,演示了在Swift中解析JSON的代码:
//: Playground - noun: a place where people can play
import UIKit
import XCTest
import PlaygroundSupport
let json = """
{
"success":true,
"token":"***"
,
"user": {
"id": "59f0ec6d5479390345980cc8",
"username": "john",
"email": "john@gmail.com"
}
}
""".data(using: .utf8)!
do {
if let data = try JSONSerialization.jsonObject(with: json, options: .allowFragments) as? [String:Any], let token = data["token"] {
print("token is \(token)")
}
} catch _ {
print("Failed to decode JSON")
}
工作原理如下:
struct User : Codable
{ var id : String
}
struct JWT : Codable
{ var success : Bool
var token : String
var user :User
}
let json = """
{ \"success\" : true,
\"token\" : \"***\",
\"user\":
{ \"id\": \"59f0ec6d5479390345980cc8\",
\"username\": \"john\",
\"email\": \"john@gmail.com\"
}
}
"""
let decoder = JSONDecoder()
let jwt = try decoder.decode(JWT.self, from: json.data(using: .utf8)!)
print ("token: \(jwt.token)")
工作原理如下:
struct User : Codable
{ var id : String
}
struct JWT : Codable
{ var success : Bool
var token : String
var user :User
}
let json = """
{ \"success\" : true,
\"token\" : \"***\",
\"user\":
{ \"id\": \"59f0ec6d5479390345980cc8\",
\"username\": \"john\",
\"email\": \"john@gmail.com\"
}
}
"""
let decoder = JSONDecoder()
let jwt = try decoder.decode(JWT.self, from: json.data(using: .utf8)!)
print ("token: \(jwt.token)")
你试过什么吗?
success
不是一个String
,它似乎属于Bool
类型。有几种方法可以实现这一点。这是iOS内部长期存在的争论之一。Swift 4有一些内置的解决方案(如果我没记错的话)。我建议看一下这些API,然后再回答一个更具体的问题。这里是一个很好的开始:。请检查我强烈建议使用生成json响应的类。节省了很多时间…您尝试过什么吗?成功
不是一个字符串
,它似乎属于Bool
类型。有几种方法可以实现这一点。这是iOS内部长期存在的争论之一。Swift 4有一些内置的解决方案(如果我没记错的话)。我建议看一下这些API,然后再回答一个更具体的问题。这里是一个很好的开始:。请检查我强烈建议使用生成json响应的类。节省大量时间…只需将“成功”更改为布尔值。只需将“成功”更改为布尔值。