iphone - 无法使用 CJJsonSerializer 序列化 NSDate

标签 iphone ios objective-c touchjson

我尝试将 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/

相关文章:

ios - 从 UIView 子类调用 popViewControllerAnimated

iphone - 如何从 "partial curl"类型segue返回

ios - 从 URL 显示 mp3 的波形

iphone - 在 iOS 上,如何使 cell.imageView 刷新其内容?

ios - AdMob 中介与 iAd

objective-c - Swift/ObjC 循环导入

iphone - UITouch 移动速度检测

iphone - 在另一个 xib 中使用 xib 对象

iphone - 澄清有关配置文件的问题和我的特定问题

ios - 如何在 Obj C 中将简单的 NSString 保存到 Firebase?