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 = nilNSString *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或无穷大。