Objective-C JSON 类型

Posted

技术标签:

【中文标题】Objective-C JSON 类型【英文标题】:Objective-C JSON types 【发布时间】:2012-05-02 01:36:36 【问题描述】:

我在 ios 5 项目中使用NSJSONSerialization JSONObjectWithData:options:error: 来读取 JSON 字符串并将其转换为 Foundation 对象。有没有一种简单的方法可以确定对象或其某些子对象是数组、字典、数字还是字符串?

【问题讨论】:

【参考方案1】:

您可以使用-isKindOfClass: 方法检查返回的对象是否为某个类。例如,检查它是否是一个数组:

id jsonObj = [NSJSONSerialization JSONObjectWithData:...]
if ([jsonObj isKindOfClass:[NSArray class]] 
    // Do array stuff...

对于其他基础类型也是如此。

【讨论】:

【参考方案2】:

请谨慎使用NSJSONSerialization,因为它仅支持 iOS 5.0+ 和 Mac OS X 10.7+。

我觉得你也可以试试第三方库,比如:

JSONKit(根据其介绍比 NSJSONSerialization 快​​) SBJson

两者都易于使用且灵活。

【讨论】:

我使用 SBJson 框架 已经有一段时间了,它对我来说效果很好...... ;-) 这很好,但它并不能真正回答问题......这可能更适合作为评论。【参考方案3】:

所有对象都可以回答他们的类。更有用的是,您可以询问某物是否是某个类或其任何子类的成员:

id jsonParse;

if ([jsonParse isKindOfClass:[NSArray self]]) 
    for (id element in (NSArray *)jsonParse) 

        // and so on
    

【讨论】:

[NSArray self] 看起来很奇怪(尽管它确实有效); [NSArray class] 是更典型的 Objective-C 惯用语言。 它更典型,但有点错误。向一个类询问它的类就是询问它的元类(一个概念在Objective C 中幸好没有)。然而,为自己上一堂课是清楚、正确的,而且我敢说……优雅。

以上是关于Objective-C JSON 类型的主要内容,如果未能解决你的问题,请参考以下文章

objective-C nil,Nil,NULL 和NSNull的小结

Objective-C:来自 jquery 回调的 json 响应

java 怎么将List<List<Object>>类型转换成json类型,怎么读取json类型

JsonResult(object) 导致“不支持集合类型'Newtonsoft.Json.Linq.JToken'。”

在 graphql-tag 中定义 JSON/Object 类型

找不到“object”类型的不同支持对象“[object Object]”。仅支持在从 JSON 文件读取和解析数据时绑定到 Iterables