2012-05-07 33 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); 

使用响应数组来显示您的结果。