坚持解析从服务器,ios返回的JSON

时间:2012-09-17 20:41:21

标签: ios json afnetworking

我正在使用AFNetworking进行身份验证,如下所示

AFJSONRequestOperation *operation   =   [AFJSONRequestOperation JSONRequestOperationWithRequest:request 
                                                                                            success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
                                                                                                // Parsing will be here                                                                                                                                                                                      
                                                                                            {

                                                                                            failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
                                                                                                NSLog(@"ERROR :jason is %@",JSON);
                                                                                            }];

[client enqueueHTTPRequestOperation:operation];

以下是从服务器

收到的JSON
{
    "first_name" = A;
    "last_name" = B;
}

问题: 如何在ios中解析这个JSON。我被卡住了,因为从服务器返回根本没有任何标签。如果其格式为

{
  "user": {
    "first_name": "A",
    "last_name": "B",
  }
}

我可以通过执行以下操作来解析

NSArray  *userList  = [[NSArray alloc] init];
userList            =  [JSON objectForKey:@"results"];

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

“标签”不在terminology of JSON中。 JSON的复杂结构在发送方和接收方之间进行协商(或简单地由发送方决定),只要它正确解析,就不需要遵循任何特定的大纲。

你引用的第一个准JSON字符串(如果它是有效的JSON)可能会识别个人的名字和姓氏,你可能会知道它是一个“用户”身份,以及它识别出的用户,从上下文。

通常,您必须将JSON字符串作为洋葱接近,一次剥离一个图层。在第一个字符串的情况下,只有一个图层,一个映射到NSDictionary的“对象”。因此,收到对象后(如果有必要,使用isKindOfClass验证它确实是一个NSDictionary),您可以将id值转换为NSDictionary并继续使用{{1或者其他一些来访问。中的值。

答案 1 :(得分:0)

您应该使用iOS5中提供的新JSONSerialization类,这使得JSON易于使用。下面是一个抓住你的json并在fetchedData方法中解析它的快速示例。下面列出的资源

//CALL dataWithContentsOfURL ONCE DATA HAS BEEN RECEIVED YOU CAN PARSE THE JSON:
NSError *error = nil;
NSData* data = [NSData dataWithContentsOfURL:kURL options:NSDataReadingUncached error:&error];
if (error) {
    NSLog(@"%@", [error localizedDescription]);
} else {
    NSLog(@"Data has loaded successfully.");
}
//MORE CODE HERE?


- (void)fetchedData:(NSData *)responseData {
    _yourObjectArray = [[NSMutableArray alloc] init];

    //parse out the json data
    NSError* error;
    NSArray* json = [NSJSONSerialization JSONObjectWithData:responseData //1
                                                    options:kNilOptions
                                                      error:&error];

    for(int i=0; i<[json count]; i++){
        YourObject *yObject = [[YourObject alloc]init];
        NSDictionary* rawData = [json objectAtIndex:i]; //2

        yObject.FirstName = [rawData objectForKey:@"first_name"];
        yObject.LastName = [rawData objectForKey:@"last_name"];

        [_yourObjectArray addObject:yObject];
    }
}

来源: http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSJSONSerialization_Class/Reference/Reference.html http://www.raywenderlich.com/5492/working-with-json-in-ios-5