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的主要内容,如果未能解决你的问题,请参考以下文章
C# 后台通过网络地址访问百度地图取回当前在地图上的经纬度,并将取回的复杂Json格式字符串反序列化(Newtonsoft.Json)