0

自分のデータを試すと、「日付」の NSLog が null を返します。これがWebページからの私のjsonです:

[{"日付":"2012-08-13 12:00:00","timezone_type":3,"タイムゾーン":"EST5EDT"},{"日付":"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] <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 303a3030222c2274 696d657a 6f6e655f 74797065 223a332c 2274696d 657a6f6e 65223a22 45535435 45445422 7d5d3c62 6f64793e 0a0a3c2f 6c 7f6839

解決策を見つけるのに苦労しています。

4

1 に答える 1

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 ドキュメントです。

于 2012-08-15T23:27:04.903 に答える