2012-12-09 97 views
-1

我正在從The Joys of Code讀取數據。 JSON格式的API返回數據,其中布爾變量被寫成這樣:NSJSONSerialization無法正確映射布爾值

{ "obj" : 
    { 
     "sharing":false, 
     "modified":"tuesday" 
    } 
} 

注意,共享:假不有字周圍引號。然後,我使用NSJSONSerialization將此JSON解析爲一個對象(本例中爲NSDictionary)。

的問題是,「分享」:虛假或「共享」:真總是創造與共享= 0,其中0是一個NSNumber與值的對象​​0

我的問題是,如果這是有效的JSON和NSJSONSerialization無法正常工作,或者如果原始JSON無效。

+0

一切都很好。必須在你如何嘗試閱讀從NSJSON –

+0

得到的字典好吧。我應該先檢查一下。問題是服務器。它總是返回false。 –

+0

:)林也往往很快責怪系統類,一般都是錯的:/ –

回答

2

NSJSONSerialization工作正常,我與上述JSON(投入虛實):

NSData *json = [@"{ \"obj\" : \ 
       { \ 
       \"sharing\":false, \ 
       \"modified\":\"tuesday\" \ 
       } \ 
       }" dataUsingEncoding:NSUTF8StringEncoding]; 
id dict = [NSJSONSerialization JSONObjectWithData:json options:0 error:nil]; 
id sharing = dict [@"obj"][@"sharing"]; 
NSLog(@"%d", [sharing boolValue]); 

json = [@"{ \"obj\" : \ 
       { \ 
       \"sharing\":true, \ 
       \"modified\":\"tuesday\" \ 
       } \ 
       }" dataUsingEncoding:NSUTF8StringEncoding]; 
dict = [NSJSONSerialization JSONObjectWithData:json options:0 error:nil]; 
sharing = dict [@"obj"][@"sharing"]; 
NSLog(@"%d", [sharing boolValue]); 
+0

謝謝。我只是做了完全相同的事情,它的工作原理。 - >是一個始終返回false的服務器錯誤。 –

0

它是有效的。你總是可以從NSNumber得到BOOL[number boolValue],並檢查它作爲

if ([number boolValue]) 

if ([number boolValue] == YES) 
+0

好吧,它是有效的?你有一個參考,所以我可以詢問Apple爲什麼NSJSONSerialization總是將其映射到NO? –

+0

@PauldeLange,它不應該總是「不」。它應該是0代表假,1代表真。 – iDev

+1

@PauldeLange,你在問技術支持嗎,https://developer.apple.com/support/technical/submit/ ..剛剛檢查了關於bool和json的其他幾個問題,看起來像我的上面的答案應該有助於在這種情況下。在這裏看到這個問題http://stackoverflow.com/questions/7530173/how-to-parse-json-in-ios-app ..不知道你爲什麼不在那裏得到真實.. – iDev