我尝试将 NSDate
添加到 NSMutableDictionary
,然后使用以下方法使其成为 JSon
字符串:
NSMutableDictionary *d = [[NSMutableDictionary alloc]init];
[d setObject:[NSDate date] forKey:@"date"];
NSData *jsondata = [[CJSONSerializer serializer] serializeDictionary:d error:nil];
NSString *requestBody = [[[NSString alloc] initWithData:jsondata encoding:NSUTF8StringEncoding] autorelease];
我有几个问题:
1)jsondata
为nil,然后requestBody
也为nil。
2) [NSDate date]
让我弄错日期,不像我 iPhone 中的日期:
2013-01-19 11:48:46 +0000
对这个问题有什么帮助吗?
编辑:
当我打印错误时,我收到了这条消息:
Error Domain=TODO_DOMAIN Code=-1 "Cannot serialize data of type '__NSDate'" UserInfo=0x177850 {NSLocalizedDescription=Cannot serialize data of type '__NSDate'}
这不可能吗?
最佳答案
字典插入日期失败的可能性很小。问题似乎更可能出在 CJSONSerializer
上。
尝试以下操作:
NSMutableDictionary *d = [[NSMutableDictionary alloc]init];
[d setObject:[NSDate date] forKey:@"date"];
NSError *error = nil;
NSData *jsondata = [[CJSONSerializer serializer] serializeDictionary:d error:&error];
if (!jsonData)
{
NSLog(@"Error %@ while serialising to JSON");
}
NSString *requestBody = [[[NSString alloc] initWithData:jsondata encoding:NSUTF8StringEncoding] autorelease];
您应该会看到一条错误打印到控制台。
更新
好的,看起来我们是对的,CJSONSerializer 不能序列化日期。所以你需要把你的日期变成一个字符串。这是通过 NSDateFormatter 完成的。
NSMutableDictionary *d = [[NSMutableDictionary alloc]init];
NSDate *date = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss z"];
NSString *dateString = [dateFormatter stringFromDate:date];
[d setObject:dateString forKey:@"date"];
NSError *error = nil;
NSData *jsondata = [[CJSONSerializer serializer] serializeDictionary:d error:&error];
if (!jsonData)
{
NSLog(@"Error %@ while serialising to JSON");
}
NSString *requestBody = [[[NSString alloc] initWithData:jsondata encoding:NSUTF8StringEncoding] autorelease];
希望您现在应该在 JSON 中获得格式化的日期。您可以通过更改传递给 stringWithDate:
的字符串来改变格式。如果您经常这样做,您将需要一个单一的日期格式化程序,因为创建它们的成本很高。
关于iphone - 无法使用 CJJsonSerializer 序列化 NSDate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14414044/