2017-10-25 6 views
0

Swift 4でこのjsonをデコードするにはどうしたらいいですか? "トークン"を自分で取得したいので、キーチェーンに保存できます。Swift 4でJSON(JSON Webトークン)をデコードするにはどうすればよいですか?

{ 
    "success":true, 
    "token":"***" 
     , 
    "user": { 
    "id": "59f0ec6d5479390345980cc8", 
    "username": "john", 
    "email": "[email protected]" 
    } 
} 

私はこれを試しましたが、何も印刷しません。

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 
} 
+2

あなたが何をしようとしたことがありますか? – Hamish

+0

'success'は' String'ではなく、 'Bool'型のようです。 –

+0

これにはいくつかの方法があります。これは、特にiOS内での長期にわたる議論の1つです。 Swift 4のソリューションが組み込まれています(正しくリコールすれば)。これらのAPIを見て、より具体的な質問に戻ってくることをお勧めします。ここから始めましょう:https://developer.apple.com/swift/blog/?id=37 – Oxcug

答えて

1

作品:

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\": \"[email protected]\" 
    } 
} 
""" 

let decoder = JSONDecoder() 
let jwt = try decoder.decode(JWT.self, from: json.data(using: .utf8)!) 
print ("token: \(jwt.token)") 
+0

"成功"をブール値に変更するだけです。 – daniel

1

はここスウィフトで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": "[email protected]" 
} 
} 
""".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") 
} 
関連する問題