2012-01-05 64 views
2

我已经了解到,在iOS5上有一个用于JSON解析的本机解决方案,能够使用该解决方案代替大多数人使用的外部JSON框架是非常好的。iOS5上的复杂JSON

有关如何使用JSON原生iOS上​​的文章是在这里: 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框架吗?

在此先感谢您的意见。

+0

“Java”或“JavaScript”?如帖子中提到的那样,Java是Java的 – fge 2012-01-05 22:11:27

+0

。 – user1006198 2012-01-05 23:23:30

+0

错误不,你不能以这种方式访问​​Java的JSON。它与JDK的外部库完成,如杰克逊。 – fge 2012-01-05 23:27:06

回答

1

不可以使用“点符号”。 您将不得不使用NSArray及其objectAtIndex连同NSDictionary及其objectForKey

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

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

+0

非常感谢Krizz;我希望能够节省硬手工工作以从JSON中获取数据,但似乎最终我所得到的只是从JSON格式转换为字典和数组格式,所以我可以在本地遍历它们,就好像我正在创建并填充它们。如果有人在调用密钥并获取值(指定层次结构,不一定使用点符号)的情况下创建API,也许会很好。处理复杂的JSON Feed时会节省大量时间。 – user1006198 2012-01-05 23:28:05

+0

我相信,[KVC](http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/KeyValueCoding.html)是可能的。 – Krizz 2012-01-05 23:30:52

+0

@Krizz基于我对KVC的研究,它不一定是可能的,因为KVC无法访问特定的数组索引。所以,如果你的数据结构碰巧包含一些数组,KVC将无法工作。 – 2012-09-27 02:49:04

1

这实际上是一个关于遍历objective-c数据结构而不是JSON的语法问题。查看访问文档NSDictionaryNSArray

+0

感谢您的澄清。我的理解是,在iOS中解析JSON的对象也会隐含地像Java上的对象那样行事,所以我不确定为什么我不能在obj-c上使用等效的点语法。因此,该对象所做的一切是从JSON转换为常规NSDictionary和NSArray? – user1006198 2012-01-05 23:25:17

+0

是的。它将原始JSON转换为基本的Objective-C数据结构,值得注意的是NSArrays,NSDictionaries,NSStrings和NSNumbers – coneybeare 2012-01-06 00:17:04