0

我尝试添加NSDateNSMutableDictionary,然后使用以下方法使其成为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是零,然后requestBody也是零。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'}

这不可能吗?

4

2 回答 2

4

字典似乎不太可能无法插入日期。问题似乎更有可能出在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:。如果您经常这样做,您将需要一个日期格式化程序,因为创建它们的成本很高。

于 2013-01-19T12:02:35.173 回答
0

JSON 不支持将日期作为标准类型,因此无法自动序列化NSDate. 您必须传递日期的字符串表示或数字时间戳表示。例如,您可以通过执行以下操作将其序列化为时间戳:

[d setObject:@([[NSDate date] timeIntervalSince1970]) forKey:@"date"]
于 2013-01-19T12:16:00.987 回答