在NSDictionary中传递NSDate并转换为NSData以进行jsondata修复

9to*_*ios 4 json objective-c nsdictionary nsdate ios

我有一个json NSStringNSDate数据(dob)我创建NSDictionary它,但当我使用代码将其转换为数据

 NSData *requestData1 = [NSJSONSerialization dataWithJSONObject:json_inputDic options:0 error:&error];
Run Code Online (Sandbox Code Playgroud)

通过给出错误来杀死它

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (__NSDate)'
Run Code Online (Sandbox Code Playgroud)

我的问题是我需要传递dob,因为NSDate是强制性的.我如何解决它?

例如

   NSDate *newDate = [NSDate date];
    [dic setValue:newDate forKey:@"dob"];


    NSString *good = @"good";

    [dic setValue:good forKey:@"good"];

    NSLog(@"dic=%@",dic);
    NSError *error;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&error]; //it gives error

    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    NSLog(@"jsonData as string:\n%@", jsonString);
Run Code Online (Sandbox Code Playgroud)

Rob*_*Rob 8

NSDate无法用JSON本地表示.正如NSJSONSerialization文件所说:

可以转换为JSON的对象必须具有以下属性:

  • 顶级对象是NSArrayNSDictionary.

  • 所有的对象都是实例NSString,NSNumber,NSArray,NSDictionary,或NSNull.

  • 所有字典键都是实例NSString.

  • 数字不是NaN或无穷大.

从您的问题中不清楚日期应该以什么格式表示在您的JSON中.通常,您以某种标准日期字符串格式(例如ISO 8601/RFC 3339格式2016-01-25T06:54:00Z)格式化日期.

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZZZZZ";
Run Code Online (Sandbox Code Playgroud)

或者,对于macOS 10.12和iOS 10,您可以:

NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init];
Run Code Online (Sandbox Code Playgroud)

然后:

NSString *birthDateString = [formatter stringFromDate:birthDate];
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅Apple技术问答1480.

或许,因为这是生日,你只需要yyyy-MM-dd.

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
formatter.dateFormat = @"yyyy-MM-dd";
NSString *birthDateString = [formatter stringFromDate:birthDate];
Run Code Online (Sandbox Code Playgroud)

最重要的是,您必须告诉我们您的Web服务期望格式化日期的格式,然后我们可以帮助您相应地格式化它.