2011-03-13 49 views
2

我只是在iOS中玩JSON解析器,它作为一个(简单)示例正常工作。但我是一个奇迹怎么会真正分析的东西(有点)更复杂,一个Twitter趋势JSON,像这样:解析IOS中的Twitter JSON提要

{ 
    "trends": { 
     "2011-03-13 11:42:17": [ 
      { 
       "events": null, 
       "query": "Fukushima", 
       "promoted_content": null, 
       "name": "Fukushima" 
      }, 
      { 
       "events": null, 
       "query": "Rebecca Black", 
       "promoted_content": null, 
       "name": "Rebecca Black" 
      }, 
      { 
       "events": null, 
       "query": "Pearl Harbour", 
       "promoted_content": null, 
       "name": "Pearl Harbour" 
      }, 
      ... 
      { 
       "events": null, 
       "query": "Magdalena Neuner", 
       "promoted_content": null, 
       "name": "Magdalena Neuner" 
      } 
     ] 
    }, 
    "as_of": 1300016537 
} 

如何将一个只返回前3个疑问?在这种情况下:福岛,丽贝卡黑色珍珠港

使用示例代码,它是这样的:

for (int i = 0; i < [luckyNumbers count]; i++) 
    [text appendFormat:@"%@\n", [luckyNumbers objectAtIndex:i]]; 

这是一个简单得多的饲料不过,能不能走近什么我正在寻找同样的方式?


编辑

我现在想返回 “查询” 的价值:

所以我真的这样做:

NSLog(@"%@", [[luckyNumbers objectForKey:@"trends"]); 

这当然记录的内容关键的“趋势”,我怎样才能不仅返回趋势的第一个(也是唯一的)关键点,而且还要挖掘更多层次以返回“查询”内容?

我也试过这样的事情:

NSString *date = [[[luckyNumbers valueForKeyPath:@"trends"] allKeys] description]; 
NSArray *trends = [luckyNumbers objectForKey:@"trends"]; 
NSLog(@"%@", [trends valueForKeyPath:date]); 

,但没有去...

回答

0

JSON地图像喜欢字典和数组 - 这就是它的角度(相对于XML)。如何从特定的JSON文件中获取信息将取决于该文件的设计方式。

JSON中的方括号表示数组 - 大括号表示字典(对象)。所以在你的例子中,我们看到有一个字典包含一个关键字'trends'的对象,这个对象本身就是一个字典。

如果您记录解析数组的输出,您将更容易掌握此操作,因为您会看到NSArrays和NSDictionaries的整个结构。要做到这一点,一旦你解析你的JSON你想要做的事,如:

NSLog([parsedJsonResult description]);

+0

控制台给出了非常清晰的解析输出,这很有用,但是我怎样才能从关键字“trends”中返回字典? – 2011-03-13 12:28:36

+0

好吧,假设你的解析器返回一个名为'results'的字典对象,你会想'[results objectForKey:@“trends”]''。 – lxt 2011-03-13 13:54:01

+0

实际上在那个例子中,我试图返回“查询”的值,我应该看看objectForKey吗? – 2011-03-14 11:41:23

1

它是您使用取决于其JSON解析器。

如果您使用document parser,您将获得一个NSDictionary的字典和数组。 您需要知道文档结构以提取所需的信息。您可以使用任何常规机制(for循环,枚举数,谓词等)

如果文档非常大,您可能需要一个类似于SAX的解析器,如yajl。您可以定义方法以在分析每种对象时使用它们。只要你得到你要找的东西(3个查询或其他),你就停止解析。 速度更快,消耗内存更少。但它有点复杂。