Objective-C:如何读取 JSON?

Posted

技术标签:

【中文标题】Objective-C:如何读取 JSON?【英文标题】:Objective-C: How to read JSON? 【发布时间】:2011-11-29 18:36:33 【问题描述】:

我发现这篇关于从 ios 中的 URL 请求解析 JSON 响应的文章:http://www.raywenderlich.com/2965/how-to-write-an-ios-app-that-uses-a-web-service。

本文使用 JSON 框架。我已经从网页上下载了最新的“SBJson_v3.0.4.zip”并拖入了我项目中的一个新组。但随后构建返回 62 个错误,例如:

ARC 禁止发送“释放”的显式消息 unsafe_unretained 属性 'delegate' 的现有 ivar 'delegate' 必须是 __unsafe_unretained 'retain' 不可用:在自动引用计数模式下不可用

有人知道为什么吗? JSON 框架是否与最新的 Xcode 不兼容?

【问题讨论】:

这与您的操作系统目标(>= 5.0)有关,而不是 Xcode。相关:***.com/questions/6368600/… 【参考方案1】:

从 iOS 5 开始,iOS 有了自己的 JSON 解析器(感谢 Twitter!)

NSError *err = nil;
id result = [NSJSONSerialization JSONObjectWithData:data options:0 error:&err];

一定要检查输出的类型——它可以是任何东西,从字符串到数字到字典再到数组。

【讨论】:

我对这两个答案都投了赞成票,但为了记录,我更喜欢这个答案,因为如果不需要,为什么要使用外部框架? JSONObjectWithData 返回空值。为什么它可以返回null?有什么想法吗? 我发现了问题。我的 JSON 无效。抱歉,我是 iOS 新手。与 android 相比,调试有点困难。【参考方案2】:

您需要为包中提供的那些特定文件禁用自动引用计数。如果您转到项目设置 -> 您的目标 -> 构建阶段选项卡并展开编译源箭头,您将看到所有项目文件。

在属于 SBJSON 的那些下,您需要添加 -fno-objc-arc 编译器标志(找到文件,双击表格的右侧,它会弹出一个框,您可以在其中添加编译器标志)

SBJSON 与最新的 SDK 兼容,但与最新 SDK 中启用的自动引用计数不兼容,这就是您收到这些错误的原因。

【讨论】:

哇,我真的很想知道,你如何命名你的文件...... 呵呵我从我正在处理的(秘密)个人项目中截取了屏幕截图,文件首先使用应用程序名称命名,以避免类冲突。除此之外没有其他原因:)【参考方案3】:

最新的 SBJSON 支持 ARC。

https://github.com/stig/json-framework

【讨论】:

【参考方案4】:

在您的项目设置中,转到构建阶段并单击编译源代码,您会得到一堆 .m 文件,它们只是您的项目文件。 单击需要禁用 ARC 的相应文件的编译器标志列,然后输入 -fno-objc-arc 。 此外,如果您的项目不支持 ARC,但您需要在几个文件中启用 ARC,您可以按照相同的步骤进行操作,但这次输入 -fobjc-arc

现在您可以使用任何 json 套件。无需担心格式。 但我强烈建议尝试苹果内置的 NSJSonSerialization 方法,如果对苹果不满意,请使用第三方 json 工具包。

在 github 上有大量可用的它们以及它们的文档。我目前在我的项目中使用的是 johnezang-jsonkit

希望对你有帮助

【讨论】:

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

如何在 Objective-C 中访问键的单个 JSON 值

如何在 obj-c 中解析动态 json 数据?

Objective-C:从 JSON 文件读取远程通知太慢

如何读取Json文件的数据

在 Objective-C 中使用 JSON 数据的 NSJSONSerialization 读取 NSDictionary 集的键值

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