0

我正在使用 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"];

有任何想法吗?

4

2 回答 2

2

“标签”不在JSON 的术语中。JSON 的复杂结构在发送者和接收者之间协商(或简单地由发送者指定)并且不需要遵循任何特定的大纲,只要它正确解析即可。

您引用的第一个 quasi-JSON 字符串(如果它是有效的 JSON)可能会识别个人的名字和姓氏,并且您可能会从上下文中知道它是“用户”身份以及它识别的用户.

通常,您必须将 JSON 字符串视为洋葱,一次剥一层。在你的第一个字符串的情况下,只有一个层,一个映射到 NSDictionary 的“对象”。因此,在收到对象后(并且,如果有必要,验证它确实是一个 NSDictionary using isKindOfClass,您可以将id值转换为 anNSDictionary并继续使用objectForKey或类似的方法来访问其中的值。

于 2012-09-17T22:18:06.753 回答
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

于 2012-09-17T20:54:10.600 回答