JSON写入中无效的顶级types
我试图创build一个简单的JSON对象,但我仍然得到错误,我知道我的代码中有什么问题:
NSString *vCard = [BRContacts getContacts]; // this is just a string, could be nil NSDictionary *JSONdic = nil; if (vCard) { JSONdic = [NSDictionary dictionaryWithObjectsAndKeys:@"1",@"status",vCard,@"data", nil]; } else { JSONdic = [NSDictionary dictionaryWithObjectsAndKeys:@"0",@"status",@"vCard is empty",@"error", nil]; } NSError *error = nil; NSData *JSONData = [NSJSONSerialization dataWithJSONObject:JSONdic options:NSJSONWritingPrettyPrinted error:&error]; return [GCDWebServerDataResponse responseWithJSONObject:JSONdata];
例外是
JSON写入中无效的顶级types
我也检查了JSONdic
,它不是在每一个情况下都是零。 有什么build议么?
我不能说错误是什么,因为我在这里尝试过。
我试过用NSString *vCard = nil
和NSString *vCard = @"SOMESTRING"
,这两种情况都有效。
NSString *vCard = @"SOMESTRING"; // this is just a string, could be nil NSDictionary *JSONdic = nil; if (vCard) { JSONdic = @{@"status" : @"1", @"data" : vCard}; } else { JSONdic = @{@"status" : @"0", @"error" : @"vCard is empty"}; } NSError *error = nil; NSData *JSONData = [NSData data]; if ([NSJSONSerialization isValidJSONObject:JSONdic]) { JSONData = [NSJSONSerialization dataWithJSONObject:JSONdic options:NSJSONWritingPrettyPrinted error:&error]; }
确保[BRContacts getContacts]
返回一个NSString
,我只是重写一个现代语法的NSDictionary
声明。
好的,我解决了。 这是一个与这条线有关的问题:
return [GCDWebServerDataResponse responseWithJSONObject:JSONdata];
GCDWebServer的这个响应不需要一个JSON NSData
而是一个NSDictionary
:这个错误只是因为responseWithJSONObject
处理input来创build一个JSON对象(并且我传递了一个JSON“预处理”对象)。 所以我的错误是不相关的,我的初始代码,所以我现在更新,以备将来参考,我解决了使用:
return [GCDWebServerDataResponse responseWithJSONObject:JSONdic];
根据类似问题的文档一定要遵循这个规则:
可以转换为JSON的对象必须具有以下属性:
- 顶级对象是NSArray或NSDictionary。
- 所有对象都是NSString,NSNumber,NSArray,NSDictionary或NSNull的实例。
- 所有的字典键都是NSString的实例。
- 数字不是NaN或无穷大。