2014-11-06 81 views
0

在我最近的應用程序中,我收到一個JSON並需要驗證objet字符串實際上是一個布爾值還是普通字符串。檢查NSString是否有負值布爾值

我知道NSString類有一個方法boolValue。但是,如果創建了負值bool值或者不是有效的bool值,則這是方法返回

但是我需要在我的應用程序中有不同的行爲,如果字符串實際上是一個布爾值或正常字符串,因爲JSON可以同時具有這兩種情況。

任何想法我怎麼能做到這一點?

+0

所以基本上你想知道字符串是'1'還是'0','true'或'false',或者'yes'或'no'? – 2014-11-06 16:38:37

+0

是的,基本上。但我想檢查是否可以避免「檢查週期」來驗證內容而不是對象類型。 – DaSilva 2014-11-06 16:59:35

回答

1

來自JSON的A BOOL實際上將被包裝在NSNumber中,因此它與檢查對象的類一樣簡單。

if ([object isKindOfClass:[NSNumber class]]) { 
    BOOL value = [object boolValue]; 
} 
+0

這當然,假設你已經通過'NSJSONSerialization'傳遞了這個。 – ravron 2014-11-06 16:47:36

+0

簡單明瞭!!!非常感謝@jshier – DaSilva 2014-11-06 17:00:19

2

您可以簡單地創建一個NSString的類別,並添加一個方法isJSONBoolean

@implementation NSString (JSONBoolean) 

-(BOOL) isJSONBoolean 
{ 
    return [self isEqualToString:@"false"] || [self isEqualToString:@"true"] 
    || [self isEqualToString:@"NO"] || [self isEqualToString:@"YES"] 
    || [self isEqualToString:@"0"] || [self isEqualToString:@"1"]; 
} 

@end 

隨時根據你的需要測試的值來改變它。

+0

您的解決方案可以工作,但我更喜歡檢查對象而不是內容。我瘦瘦的解決方案更加清晰。謝謝 – DaSilva 2014-11-06 17:01:44

+1

這個解決方案更多的是不幸的是,後端實際上並沒有在響應中提供布爾值,而是編碼某種布爾表示形式的字符串。 – 2014-11-06 17:05:09

+1

通過閱讀你的問題,我雖然你有一個NSString對象的反序列化你的JSON。 – Imotep 2014-11-06 21:14:03