为什么使用NSJSONSerialization时此JSON无效?

时间:2013-02-21 14:58:56

标签: ios json

我是JSON的新手,不明白为什么会失败。根据在线验证工具,JSON有效,但NSJSONSerilization说这个字符串无效。为什么它无效?

NSString* JSON = @"{\"Questionnaire\":{\"questionnaireid\":1,\"modifiedDate\":\"2012-12-28 15:27:00\"}}";

if (![NSJSONSerialization isValidJSONObject:JSON]) {
  return nil;
}

NSError *jsonParsingError = nil;
NSDictionary* data = [NSJSONSerialization dataWithJSONObject:JSON options:NSJSONReadingMutableContainers error:&jsonParsingError];

2 个答案:

答案 0 :(得分:2)

为什么在自己创建JSON时进行序列化?

你应该做什么:

NSData *jsonPayload = [JSON dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *data = [NSJSONSerialization JSONObjectWithData:jsonPayload
 options:kNilOptions error:&error];

答案 1 :(得分:1)

因为在传递NSString时,JSON对象必须是NSArray类型或NSDictionary类型。

来自docs

  

可以转换为JSON的对象必须具有以下内容   属性:

     
      
  • 顶级对象是NSArray或NSDictionary。
  •   
  • 所有对象都是NSString,NSNumber,NSArray,NSDictionary或NSNull的实例。
  •   
  • 所有字典键都是NSString的实例。
  •   
  • 数字不是NaN或无穷大。
  •   

<强>更新

你可能想这样做:

NSData *jsonData = [JSON dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&err];