iOS5 上的复杂 JSON

Posted

技术标签:

【中文标题】iOS5 上的复杂 JSON【英文标题】:complex JSON on iOS5 【发布时间】:2012-01-05 22:09:35 【问题描述】:

我了解到在 ios5 上有一个用于 JSON 解析的原生解决方案,能够使用它而不是大多数人使用的外部 JSON 框架真是太好了。

关于如何在 iOS 上原生使用 JSON 的文章在这里: http://www.raywenderlich.com/5492/working-with-json-in-ios-5

现在我的问题是:到目前为止,处理易于格式化的 JSON 似乎很容易,但我很难理解如何访问更复杂的数据方案。

例如,如果我有一个包含 3 个字典的 JSON 对象,并且每个字典都包含不同的数组和字典作为条目,我不清楚如何访问这些数据。

在 Java 中,您可以使用点符号来访问子数据,例如 obj1.dictionary1[3].varname,它会访问第一个对象,转到 dictionary1 的位置 3 并获取 varname 的键值。 ..如何仅使用 iOS JSON 功能获得相同的结果?

遗憾的是,iOS 的原生 JSON 框架似乎没有遵循 Java 中 JSON 对象的使用逻辑,所以我对如何实现我的目标一无所知。

我应该放弃原生 JSON 并使用在线提供的 JSON 框架吗?

提前感谢您的 cmets。

【问题讨论】:

Java,如帖子中所述。 Err 不,您不能以这种方式使用 Java 访问 JSON。它是通过 JDK 的外部库完成的,例如 Jackson。 我明白了;我正在寻找 JSON 教程,并找到了一个他们在 Java 中使用点符号的示例;但是从您的评论看来,那篇文章是错误的。 【参考方案1】:

没有。您不能使用“点符号”。 您必须同时使用NSArray 及其objectAtIndex 以及NSDictionary 及其objectForKey

见,例如IOS JSON get all values from a "JSON Dict".

在大多数情况下,第三方库将具有类似的 API(即,将返回嵌套的字典和数组)。还没有看到任何库提供类似对象的“点符号”。

【讨论】:

非常感谢 Krizz;我希望节省繁重的手动工作以从 JSON 中获取数据,但似乎最终我得到的只是从 JSON 格式转换为字典和数组格式,所以我可以像在创建一样原生地遍历它们并填充它们。如果有人只是创建一个 API 来调用键并获取值(指定层次结构,不一定使用点表示法),那可能会很好;在处理复杂的 JSON 提要时,它会节省大量时间。 我相信,KVC 是可能的。 @Krizz 根据我对 KVC 的研究,这不一定是可能的,因为 KVC 无法访问特定的数组索引。所以,如果你的数据结构碰巧包含一些数组,KVC 将无法工作。【参考方案2】:

这确实是一个关于遍历objective-c 数据结构时的语法问题,而不是JSON。查看用于访问NSDictionary 和NSArray 的文档

【讨论】:

感谢您的澄清。我是否理解在 iOS 中解析 JSON 的对象也会隐含地像 Java 上的对应对象一样,所以我不确定为什么我不能在 obj-c 上使用点语法的等效项。那么对象所做的一切就是从 JSON 到常规 NSDictionary 和 NSArray 的转置? 是的。它将原始 JSON 转换为基本的 Objective-C 数据结构,值得注意的是 NSArrays、NSDictionaries、NSStrings 和 NSNumbers

以上是关于iOS5 上的复杂 JSON的主要内容,如果未能解决你的问题,请参考以下文章

使用Gson解析复杂的json数据

C# 后台通过网络地址访问百度地图取回当前在地图上的经纬度,并将取回的复杂Json格式字符串反序列化(Newtonsoft.Json)

关于解析各种复杂json

安卓怎么用gson解析服务端返回的复杂json数据

解析复杂JSON数据

关于jackson解析复杂json,该怎么解析