Ios 如何在Swift 4中解码JSON(JSON Web令牌)?

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

如何在Swift 4中使用解码器解码此json? 我希望能够自己获取“令牌”,以便将其存储在钥匙链中

{
  "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响应的类。节省大量时间…只需将“成功”更改为布尔值。只需将“成功”更改为布尔值。