我有一个json有NSString
和NSDate
数据(dob)
我创建了NSDictionary
,但是当我使用代码
NSData *requestData1 = [NSJSONSerialization dataWithJSONObject:json_inputDic options:0 error:&error];
通过提供错误来杀死
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (__NSDate)'
我的问题是我需要传递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);
答案 0 :(得分:7)
NSDate
无法在本地使用JSON表示。正如NSJSONSerialization
文档所说:
可以转换为JSON的对象必须具有以下属性:
顶级对象为
NSArray
或NSDictionary
。所有对象都是
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";
或者,对于macOS 10.12和iOS 10,您可以执行以下操作:
NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init];
然后:
NSString *birthDateString = [formatter stringFromDate:birthDate];
有关详细信息,请参阅Apple Technical Q&A 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];
总而言之,您必须告诉我们您的网络服务希望格式化日期的格式,然后我们可以帮助您相应地格式化。