2012-05-07 61 views
1

我有一個解析從服務器接收到的JSON數據後續代碼:使用JSON數據工作

-(void)connectionDidFinishLoading:(NSURLConnection *)connection { 

NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init]; 
NSArray *array_webdata=[[NSArray array] init]; 

NSString *searchStatus = [[NSString alloc] initWithData:webData encoding:NSUTF8StringEncoding];  

array_webdata = [parsedata objectWithString:searchStatus error:nil]; 

NSDictionary *usersList = [array_webdata valueForKey:@"results"]; 

//我覺得這是不是一個真正的NSDictionary因爲如果我寫的NSArray *鍵= [usersList allKeys ]。執行崩潰

NSLog(@"\n usersList =\n %@ \n", usersList); 

[searchStatus release]; 
[connection release]; 
[webData release]; 
[pool drain];} 

存儲在usersList JSON數據具有結構:

(
{ 

    createTime = "date hour"; 

    fullname = "user name"; 

    "prof_id" = number; 

    thumb = "image.jpg"; 

}, 
{ 
     data of rest of users... 
} 
) 

而且我想創建一個類來存儲每個用戶的數據,並使用「prof_id」當我想使用特定用途。 我需要這個,因爲應用程序需要一個列表與所有用戶(不是tableview),我認爲這是最簡單的方法。

有人可以幫助我嗎?謝謝!!

+0

爲什麼崩潰,如果我寫NSArray * keys = [usersList allKeys]; ???錯誤消息說:[__NSArrayM allKeys]:無法識別的選擇器發送到實例0x6863270 –

回答

4

請使用JsonKit框架解析從Web服務接收到的JSON數據。

讀取數據和分析使用JSONKit:

NSData* jsonData = [NSData dataWithData:webData]; 
JSONDecoder* decoder = [[JSONDecoder alloc] 
          initWithParseOptions:JKParseOptionNone]; 
NSArray* json = [decoder objectWithData:jsonData];

在這之後,你必須遍歷使用for循環的JSON變量。
名稱爲創建新類User(文件 - >新建 - >文件)從NSObject類繼承,創建的.h/.m文件所需的參數。(做合成,以生成屬性的getter/setter)

進口在連接類中使用User.h,並在迭代器循環中創建User實體的對象,並將這些對象添加到全局作用域數組中。

for(NSDictionary *userInfo in json) { 
    User* user=[[User alloc] init]; 
    user.fullName=[userInfo valueForKey:@"fullname"]; 
    user.prof_id=[[userInfo valueForKey:@"prof_id"] integerValue]; 
    // Add into your global array 
    [usersList addObject:user]; 
    [user release];// if ARC is not enable 
} 
// Check for successful object creation 
NSLog(@"USER LIST contain User class Objects- %@",userList); 
+0

我沒有解析JSON數據的問題,我的問題是,我不知道如何創建一個類來存儲這些數據並使用它 –

+0

檢查更新的安裝程序。 –

+0

我不確定我是否理解,將在user.h和user.m中放置哪些代碼? –

1

如果我沒有錯,你需要做的唯一事情是:

NSMutableArray *yourArray = usersList; 

,然後用一個for循環像

for(int i = 0;i<[usersList count] ;i++) 
{ 
NSMutableDictionary *yourDictionary = [usersList objectAtIndex:i]; 
int prof_id = [yourDictionary valueForKey:@"prof_id"]; 
} 

你可以得到你prof_id這樣。

我希望這有助於...

+0

您只能在Dictionary中存儲具有鍵的**對象**,而不能使用float,int數據類型。 –

1

使用JSON框架,並使用下面的代碼解析數據。

NSString* newStr = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:@"yout link to json file"] encoding:NSUTF8StringEncoding error:nil]; 

NSLog(@"new str - %@",newStr); 

NSArray *response = [newStr JSONValue]; 

NSLog(@"json array - %@",response); 

使用響應數組來顯示您的結果。