objective-c – Cocoa:将json字符串反序列化为自定义对象(不是NSDictionary,NSArray)

objective-c – Cocoa:将json字符串反序列化为自定义对象(不是NSDictionary,NSArray),第1张

概述在 java-land中,有一些有用的库可以将json字符串转换为匹配类型的对象.我见过的可可的json库只是创建了嵌套的NSDictionaries和NS Arrays.有没有一个工具可以重新构建我想要的任何对象类型的额外步骤? 所以,例如,如果我有一个名为“Unicorn”的类,其属性为“maneColor”,我的json看起来像这样: { "maneColor":"silver"} 我可 在 java-land中,有一些有用的库可以将Json字符串转换为匹配类型的对象.我见过的可可的Json库只是创建了嵌套的NSDictionarIEs和NS Arrays.有没有一个工具可以重新构建我想要的任何对象类型的额外步骤?

所以,例如,如果我有一个名为“Unicorn”的类,其属性为“manecolor”,我的Json看起来像这样:

{ "manecolor":"silver"}

我可以自动实例化“manecolor”设置为“silver”的Unicorn对象.

解决方法 我不知道任何具体的实现,但键值编码让你非常接近你想要的: Key Value Coding Guide.我在 streamed json parsing和KVC之间取得了不错的成绩.

-setValue:forKey:方法使序列化数据适应自定义对象相当简单.要继续您的示例,您将创建一个包含所有必需访问器方法的Unicorn类:-setname:/ – name,-setManecolor / -manecolor等.(您可以使用某些预期值的属性,但有例如,与manecolor值一样,您可能希望编写自定义setter以将颜色名称字符串转换为NScolor或UIcolor对象.)

您还需要向自定义对象添加两个方法:-setValue:forUndefinedKey:和-valueForUndefinedKey:.如果您的对象没有与传递给KVC方法的键匹配的访问器方法,则会调用这些方法.您可以在此处捕获意外或不受支持的值,并根据需要存储或忽略它们.

将-setValue:forKey发送到Unicorn对象时,框架会查找与键模式匹配的访问器.例如,如果键是“manecolor”并且您正在设置值,则框架将检查您的对象是否实现了-setManecolor:.如果是这样,它会调用该方法,传入值;否则,调用-setValue:forUndefinedKey:如果您的对象没有实现它,则抛出异常.

当解析器的委托收到解析Json unicorn对象的通知时,实例化一个Unicorn对象.当您的解析器将解析后的数据返回给您时,请使用-setValue:forKey:将数据添加到您的对象:

- ( voID )parserDIDBeginParsingDictionary: (SomeParser *)p{     self.currentUnicorn = [ Unicorn unicorn ];}- ( voID )parser: (SomeParser *)p dIDParseString: (Nsstring *)string          forKey: (Nsstring *)key{    [ self.currentUnicorn setValue: string forKey: key ]}- ( voID )parserDIDFinishParsingDictionary: (SomeParser *)p{    [ self.unicorns addobject: self.currentUnicorn ];}
总结

以上是内存溢出为你收集整理的objective-c – Cocoa:将json字符串反序列化为自定义对象(不是NSDictionary,NSArray)全部内容,希望文章能够帮你解决objective-c – Cocoa:将json字符串反序列化为自定义对象(不是NSDictionary,NSArray)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1020771.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存