2017-10-25 2 views
0

Wie dekodiere ich diesen JSON in Swift 4, mit Decoder? Ich möchte in der Lage sein, das "Token" von selbst zu bekommen, damit ich es im Schlüsselbund speichern kann.Wie dekodiere ich JSON (JSON Web Token) in Swift 4?

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

Ich habe dies versucht, aber es druckt nichts.

Ich kann dies nach dem Fang setzen, aber das bekommt die ganze JSON, und ich will das nicht.

print(String(data: data, encoding: .utf8)!) 

Hier sind die Strukturen. Ich denke, hier liegt das Problem.

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

Haben Sie etwas versucht? – Hamish

+0

'Erfolg' ist kein' String', es scheint vom Typ 'Bool' zu sein –

+0

Es gibt mehrere Möglichkeiten, dies zu erreichen. Dies ist eine der langen Debatten, vor allem in iOS. Es gibt einige eingebaute Lösungen mit Swift 4 (wenn ich mich richtig erinnere). Ich schlage vor, diese APIs zu betrachten und eine spezifischere Frage zu stellen. Hier ist ein guter Anfang: https://developer.apple.com/swift/blog/?id=37. – Oxcug

Antwort

1

funktioniert wie folgt:

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

Nur benötigt, um "Erfolg" zu einem Boolean zu ändern. – daniel

1

Hier einige Spielplatz-Code, der für das Parsen von JSON in Swift den Code demonstriert:

//: 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") 
}