2017-10-07 20 views
0
let responseString = String(data: data, encoding: .utf8) 

if responseString["is_valid"] == true { 
    print("Login Successful") 
} else { 
    print("Login attempt failed") 
} 

我試圖從responseString字典中獲取"is_valid"的值。但是,我不知道如何。我試過的所有東西都失敗了。如何從Swift3/Swift4中的JSON獲取bool的值?

responseString看起來是這樣的,當通過print()輸出:在dataJSONSerialization

if let responseString = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Bool] { 
    if responseString!["is_valid"] == true { 
     print("Login Successful") 
    } else { 
     print("Login attempt failed") 
    } 
} 

回答

2

您可以使用這樣的完整性,使用Swift的解決方案4新編碼/解碼框架;)

let response = try? JSONDecoder().decode([String: Bool].self, from: data) 
if response?["is_value"] { 
    print("Login Successful") 
} else { 
    print("Login attempt failed") 
} 
+0

作品。非常感謝! – Sanjay

0

解析JSON:

guard let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any], 
    let isValue = json?["is_value"] as? Bool else { 
     // handle the failure to find `is_value` however you'd like here 
     return 
} 

if isValue { ... } 
+1

當然。但我的更廣泛的觀點是,我不喜歡「那樣? [String:Bool]',因爲如果JSON碰巧包含除了'is_value'等布爾值之外的任何東西,它就會失敗。使用'[String:Any]'然後將演員推遲到'Bool'直到你找回'is_value'是更安全的,恕我直言。 – Rob

0

對於

{ 
    "is_valid": true 
} 
+0

我不會推薦解碼爲'[String:Bool]',但解碼爲Swift本地字典類型'[String:Any]'這是不可能的。因此,如果你想在一行中做if(try?JSONDecoder()。decode([String:Bool] .self,from:data))?[「is_value」] == true {' –

+0

@LeoDabus'Any '不符合'Decodable'所以沒有運氣那裏;) –

+1

我知道這就是爲什麼我說這是不可能的:)考慮到它只是一個身份驗證響應,只有一個值,它不應該是一個問題在這種情況下。 –