2017-10-24 1 views
1

Ich bekomme JSON von einem Server. Zum Parsen verwende ich JASON Bibliothek. Wie kann ich JSON mit Aufzählungswert analysieren?Wie man enum mit JASON-Pod analysieren?

Beispiel:

{ 
     ... 
    "first_name": "John", 
    "last_name": "Doe", 
    "user_type": "basic" 
     ... 
} 

Wo user_type ':

enum UserType { 
    case basic 
    case pro 
} 

Hat jemand eine Idee?

+1

Was meinst du mit Parsing? Möchten Sie einen Wert 'user_type' vom JSON-Speicher in enum-Variable erhalten? – Krunal

+0

ja, du hast Recht –

Antwort

0

Kopiert von How to get enum from raw value in Swift?

enum TestEnum: String { 
     case Name = "Name" 
     case Gender = "Gender" 
     case Birth = "Birth Day" 
    } 

    let name = TestEnum(rawValue: "Name")!  //Name 
    let gender = TestEnum(rawValue: "Gender")! //Gender 
    let birth = TestEnum(rawValue: "Birth Day")! //Birth 
2

Wenn Sie Wert von user_type in Enum speichern wollen:

Ändern Sie Ihre Enum-Variablentyp in string:

enum UserType: String { 
    case basic = "basic" 
    case pro = "pro" 
} 

Lösung, ohne JASON mit

Speichern Sie Ihre JSON in Wörterbuchtyp Variable:

let jsonVar = [ 
    "first_name": "John", 
    "last_name": "Doe", 
    "user_type": "basic" 
] as [String : Any] 

nun einen Wert von Wörterbuch-Variable erhalten und Enum Variable Rohwert erstellen:

if let user_type = jsonVar["user_type"] as? String { 
    let usertype = UserType(rawValue: user_type) 
} 

Lösung, mit JASON

let json = [ 
    "first_name": "John", 
    "last_name": "Doe", 
    "user_type": "basic" 
] as AnyObject 


let jasonVar = JSON(json) 

if let user_type:String = jasonVar["user_type"].string { 
    let usertype = UserType(rawValue: user_type) 
} 
+0

Wie kann ich es mit JASON lib tun? –

+0

Versuchen Sie es mit einer aktualisierten Antwort –

0

Wenn Sie mit Swift 4 arbeiten, gibt es einen nützlichen Standard-JSONDecoder. Mit Ihrem Beispiel:

import Foundation 

let jsonDict = [ 
"first_name": "John", 
"last_name": "Doe", 
"user_type": "basic" 
] 

let jsonData = try! JSONSerialization.data(withJSONObject: jsonDict, options: []) 

enum UserType: String, Codable { 
    case basic 
    case pro 
} 

struct User: Codable { 
    let firstName : String 
    let lastName: String 
    let userType: UserType 

enum CodingKeys : String, CodingKey { 
    case firstName = "first_name" 
    case lastName = "last_name" 
    case userType = "user_type" 
    } 
} 

let decoder = JSONDecoder() 
let user = try! decoder.decode(User.self, from: jsonData) 

print(user) 
Verwandte Themen