2012-08-29 62 views
1

我有問題得到特定的「」JSON格式。我可以看到它是一本字典,所以我把字典變成一個數組是錯誤的?我試圖拉取「isReserevble = true」的記錄,然後根據用戶從UIDatepicker中的選擇,在表格視圖單元格中顯示「開始」的時間。 JSON是通過NSlog來通過,但我無法弄清楚這一點。謝謝NSJSON如何解析

它看起來像我hae字典陣列。我仍然會使用相同的方法嗎?

這是我的代碼。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    dispatch_async(kBgQueue, ^{ 
     NSData* data = [NSData dataWithContentsOfURL: 
         kLatestKivaLoansURL]; 
     [self performSelectorOnMainThread:@selector(fetchedData:) 
           withObject:data waitUntilDone:YES]; 

    }); 

} 
- (void)fetchedData:(NSData *)responseData { 
//parse out the json data 

NSError* error; 

NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; 

NSArray* myslots =[json objectForKey:@"slots"]; 
NSLog(@"allslots: %@", myslots); 


    NSMutableArray *datesArray = [[NSMutableArray alloc] init]; 
for (NSDictionary *slots in json){ 
    NSLog(@"isReservable = %@",[myslots objectForKey:@"isReservable"]); 
    if ([[myslots objectForKey:@"isReservable"]isEqualToString:@"1"]) 
    { 
     NSLog(@"begin = %@",[myslots objectForKey:@"begin"]); 
     [datesArray addObject:[myslots objectForKey:@"begin"]]; 
     NSLog(@"slots array count = %d",[datesArray count]); 
    } 

} 
NSLog(@"This is the begin: %@", datesArray); 

} 

這裏是我的NSLog的結果,所有插槽:

2012-08-29 11:54:26.531 GBSB[1137:15b03] allslots: { 
    "2012-08-29 00:00:00 America/Los_Angeles" =  (
       { 
      begin = "2012-08-29 00:00:00 America/Los_Angeles"; 
      end = "2012-08-29 08:00:00 America/Los_Angeles"; 
      isPending = 0; 
      isReservable = 0; 
      isReserved = 0; 
      label = " "; 
      span = 1; 
     }, 
       { 
      begin = "2012-08-29 08:00:00 America/Los_Angeles"; 
      end = "2012-08-29 08:15:00 America/Los_Angeles"; 
      isPending = 0; 
      isReservable = 1; 
      isReserved = 0; 
      label = " "; 
      span = 1; 
     } 
    ); 
} 

確定:這是什麼現在我得到

2012-08-30 09:28:30.812 GBSB[835:15b03] its a dictionary 
2012-08-30 09:28:30.812 GBSB[835:15b03] isReservable = (null) 
2012-08-30 09:28:30.812 GBSB[835:15b03] isReservable = (null) 
2012-08-30 09:28:30.812 GBSB[835:15b03] isReservable = (null) 
2012-08-30 09:28:30.813 GBSB[835:15b03] This is the begin: (
) 
+1

是'json'與屬性'json'相關的ivar嗎?你沒有明顯的理由使用兩者。 – Jim

+0

我是新來的,所以我可能犯了一個錯誤 – TIDev

回答

1

的錯誤消息是 - 再 - 幫助。試着解釋它:

-[__NSCFString objectForKey:]: unrecognized selector sent to instance 0x81e1c80 

也就是說,你發送的消息objectForKey:的JSON字符串對象代替解析的NSDictionary對象,這有什麼不對。

+0

你仍然收到這個錯誤(你刪除了你的更新)?如果你是,那麼H2CO3是正確的。如果你仍然得到這個錯誤,json是一個字符串,就像他說的。這需要先解決。你能打印出調試器中的json的內容嗎?使用寶json。將結果發佈在您的問題中(而不是評論)以獲得問題格式的好處。 – Jim

+0

我再次遇到此錯誤。我上面更新了我的代碼。 – TIDev

+0

沒有收到錯誤,但現在變爲空 – TIDev

0

它該位是造成你的問題:

for (NSDictionary *tempDict in self.json) { 
    [datesArray addObject:[tempDict objectForKey:@"slots"]]; 
} 

你以爲你在問f或您的JSON的"slots"屬性,但您不是,您要求在您的JSON中爲的每個子字典"slots"屬性。

儘量只此相反:

[datesArray addObject:[self.json objectForKey:@"slots"]]; 
+0

從nsarray更改self.json到字典,然後我得到 //配置單元格... cell.textLabel.text = [[self.json objectAtIndex:indexPath .row] objectForKey:@「slots」]; 'NSDic'沒有可見的@interface ... – TIDev

+0

我沒有說從NSArray更改self.json到NSDictionary - 你爲什麼要這樣做,這是一個數組!你有沒有嘗試過我在我的回答中提出的建議? – deanWombourne

+0

稍作改動。我的json現在是帶有包含字典數組的鍵的Dictionary。謝謝您的幫助。我發佈了一個不同的問題http://stackoverflow.com/questions/12204006/how-to-parse-dictionary-with-keys-that-have-array-of-dictionaries – TIDev