NSJSON“date”返回null

时间:2012-08-15 23:22:05

标签: objective-c xcode ios5 json nsjsonserialization

当我尝试自己的数据时,NSLog for“date”返回null。这是我在网页上的json:

[{“date”:“2012-08-13 12:00:00”,“timezone_type”:3,“timezone”:“EST5EDT”},{“date”:“2012-08-13 10: 00:00“,”timezone_type“:3,”timezone“:”EST5EDT“},{”date“:”2012-08-13 13:00:00“,”timezone_type“:3,”timezone“:”EST5EDT “}]

这是我的代码:.m

#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
//#define kLatestKivaLoansURL [NSURL          URLWithString://@"http://api.kivaws.org/v1/loans/search.json?status=fundraising"]
#define kLatestKivaLoansURL [NSURL URLWithString:@"http://www.xxxxxxxxxxx.com/appointjson.php"]

#import "MyAvailTimesViewController.h"

@interface MyAvailTimesViewController ()

@end

@implementation MyAvailTimesViewController
@synthesize json;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    //Do any additional setup after loading the view.
    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
    NSLog(@"%@",responseData);
    NSError* error;
    NSDictionary* json = [NSJSONSerialization 
                          JSONObjectWithData:responseData

                          options:kNilOptions 
                          error:&error];

    NSArray* latestLoans = [json objectForKey:@"date"];
    NSLog(@"date: %@", latestLoans);
    //NSLog(@"output2: %@", json);

·H

#import <UIKit/UIKit.h>

@interface MyAvailTimesViewController : UIViewController {
}

@property(nonatomic, retain) NSDictionary *json;
@end

我在responseData时的NS日志是: 2012-08-15 15:17:54.114 GBSB [480:15b03] LT; 3c21444f 43545950 45206874 6d6c2050 55424c49 4320222d 2f2f5733 432f2f44 54442058 48544d4c 20312e30 20547261 6e736974 696f6e61 6c2f2f45 4e222022 68747470 3a2f2f77 77772e77 332e6f72 672f5452 2f786874 6d6c312f 4454442f 7868746d 6c312d74 72616e73 6974696f 6e616c2e 64746422 3e0a3c68 746d6c20 786d6c6e 733d2268 7474703a 2f2f7777 772e7733 2e6f7267 2f313939 392f7868 746d6c22 3e0a3c68 6561643e 0a3c7469 746c653e 47425342 204a534f 4e204665 65643c2f 7469746c 653e0a3c 2f686561 643e0a5b 7b226461 7465223a 22323031 322d3038 2d313320 31323a30 303a3030 222c2274 696d657a 6f6e655f 74797065 223a332c 2274696d 657a6f6e 65223a22 45535435 45445422 7d2c7b22 64617465 223a2232 3031322d 30382d31 33203130 3a30303a 3030222c 2274696d 657a6f6e 655f7479 7065223a 332c2274 696d657a 6f6e6522 3a224553 54354544 54227d2c 7b226461 7465223a 22323031 322d3038 2d313320 31333a30 303a3030 222c2274 696d657a 6f6e655f 74797065 223a332c 2274696d 657a6f6e 65223a22 45535435 45445422 7d5d3c62 6f 64793e 0a0a3c2f 626f6479 3e0a3c2f 68746d6c 3e&gt;

我很难找到解决方案。

1 个答案:

答案 0 :(得分:0)

此:

[{"date":"2012-08-13 12:00:00","timezone_type":3,"timezone":"EST5EDT"},{"date":"2012-08-13 10:00:00","timezone_type":3,"timezone":"EST5EDT"},{"date":"2012-08-13 13:00:00","timezone_type":3,"timezone":"EST5EDT"}]

是一个数组,而不是字典。执行[NSJSONSerialization JSONObjectWithData:...时,返回的对象应为NSArray。因此,当您致电objectForKey:时,您会看到异常。

如果您获得nil,那么唯一明智的结论就是您要求解析的JSON数据格式不正确。

检查了您发布的NSData后,您的服务器实际上正在返回:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GBSB JSON Feed</title>
</head>
[{"date":"2012-08-13 12:00:00","timezone_type":3,"timezone":"EST5EDT"},{"date":"2012-08-13 10:00:00","timezone_type":3,"timezone":"EST5EDT"},{"date":"2012-08-13 13:00:00","timezone_type":3,"timezone":"EST5EDT"}]<body>

</body>
</html>

这显然是无效的JSON;它是一个恰好显示JSON的HTML文档。