【问题标题】:JSONRepresentation of NSObject Data ModelNSObject 数据模型的 JSON 表示
【发布时间】:2012-01-17 01:20:48
【问题描述】:

我正在尝试解析我在数据模型中填充的所有数据。我在 nsobject 中有一些 nsmutabledictionary,只是好奇是否可以获得该对象类型的 jsonrepresentation?我使用 ASIHTTPREQUEST 得到了 JSON 的无效类型。所以这里明显的问题是,如果这是可能的,或者我必须遍历对象并将其插入 nsdictionary 然后解析它?

谢谢

【问题讨论】:

  • 您可以使用反射遍历 iVar,但如果您想要的话,获得 iVar 的类型几乎是不可能的,因为 objc 不是强类型语言。
  • 您使用的是任何类型的JSON 库(如SBJSON)还是iOS 5.0 的NSJSONSerialization 类?
  • 我用的是SBJSON,还没切换到iOS 5

标签: iphone objective-c ios cocoa ipad


【解决方案1】:

您可能想查看我的实现,以将 NSObjects 序列化为 JSON,反之亦然 - https://github.com/QBurst/KVCObjectSerializer

【讨论】:

  • Mahadevan,你写的东西很酷。我使用一种方法作为使用序列化的标准方法是通过创建一个类并将我所有已知类型的对象插入其中,然后遍历 nsdictionary 以便它可以为 json 序列化。我注意到在您的代码中您正在 KVCObjectBase 中这样做,这很棒。保持好东西。
  • 嗨 Mahadevan Sreenivasan 我检查了您的个人资料,但我找不到您的电子邮件地址,询问您有关 OBJC_JSONSerializer 类的信息
  • 以上链接现在有效。你可以从那里拉取最新的代码!
【解决方案2】:

如果不了解您尝试序列化为 JSON 的对象的更多信息,很难完全回答您的问题,但不难解释可以序列化哪些对象(假设您使用的是 TouchJSON)。如果你看一下CJSONSerializer.m 中的-isValidJSONObject 方法,你会确切地看到哪些类可以被序列化:

- (BOOL)isValidJSONObject:(id)inObject
    {
    if ([inObject isKindOfClass:[NSNull class]]) { return(YES); }
    else if ([inObject isKindOfClass:[NSNumber class]]) { return(YES); }
    else if ([inObject isKindOfClass:[NSString class]]) { return(YES); }
    else if ([inObject isKindOfClass:[NSArray class]]) { return(YES); }
    else if ([inObject isKindOfClass:[NSDictionary class]]) { return(YES); }
    else if ([inObject isKindOfClass:[NSData class]]) { return(YES); }
    else if ([inObject respondsToSelector:@selector(JSONDataRepresentation)])
    {
        return(YES);
    }
    else
    {
        return(NO);
    }
}

(为清晰起见,重新格式化代码。)

因此,您可以看到 NSNULL、NSNumber、NSString、NSArray、NSDictionary 和 NSData 都可以序列化为 JSON,并且任何实现 -JSONDataRepresentation 的类也可以序列化。

根据您显然得到的“JSON 的无效类型”错误,我猜您图中的至少一个对象不在上面列出的对象中,您可能想要实现-JSONDataRepresentation 在相应的类中。

更新:从您的评论中,我看到您使用的是 SBJSON 而不是 TouchJSON。 This page 有 SBJSON 支持的类型列表。

【讨论】:

  • 哇,我不知道 TouchJSON 可以做到这一点,我使用的是 ASIHTTPRequest,我不认为这样的库有 JSONDataRepresentation,无论如何,但它使用 SBJSON,我想这在大多数库中都是标准的应该有支持,但又不确定。
  • 所以它的 NSDictionary 反对,反之亦然,我正在寻找。我想我必须遍历类属性才能获得一套完整的 NSDictionary。您有什么建议可以解决这种问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 2014-07-08
  • 2011-09-28
相关资源
最近更新 更多