2013-01-25 129 views
-2

我想分析复杂的JSON数据从服务器进来的形式如下:解析复杂的JSON数据

{ 

    "Data 1":{ 
     "2012-12-01":[ 
      { 
       "field 1":"field 2", 
       "summary":"summary 1" 
      }, 
      { 
       "field":"field 2", 
       "summary":"summary 2" 
      }, 
      { 
       "service":"service 3", 
       "summary":"summary 3" 
      } 
     ], 
     "2012-12-10":[ 
      { 
       "field":"field 1", 
       "summary":"summary 1" 
      }, 
      { 
       "field":"field 2", 
       "summary":"summary 2" 
      } 
     ], 
     "2012-12-31":[ 
      { 
       "field":"field 1", 
       "summary":"summary 1" 
      } 
     ] 
    }, 
    "Data 2":{ 
     "2013-01-4":[ 
      { 
       "field":"field 1", 
       "summary":"summary 1" 
      }, 
      { 
       "field":"field 2", 
       "summary":"summary 2" 
      }, 
      { 
       "field":"field 3", 
       "summary":"summary 3" 
      } 
     ], 
     "2013-01-8":[ 
      { 
       "field":"field 1", 
       "summary":"summary 1" 
      }, 
      { 
       "field":"field 2", 
       "summary":"summary 2" 
      } 
     ], 
     "2013-01-25":[ 
      { 
       "field":"field 1", 
       "summary":"summary 1" 
      } 
     ] 
    }, 
    "Data 3":{ 
     "2013-02-09":[ 
      { 
       "field":"field 1", 
       "summary":"summary 1" 
      }, 
      { 
       "field":"field 2", 
       "summary":"summary 2" 
      }, 
      { 
       "field":"field 3", 
       "summary":"summary 3" 
      } 
     ] 
    } 

} 

如何使用它我SBJSON解析?

请帮

在此先感谢

+0

您的任何股票解析器将返回的JSON解析到一个数组/词典“巢”。对Objective-C来说,有六种不同的解析器“品牌”,最自由的。你提供JSON字符串并返回“嵌套”。 –

+0

使用在线JSON解析器(例如http://json.parser.online.fr/)来“可视化”JSON。 –

+0

在使用SBJSon解析器解析时需要帮助,请帮助 – iOSDev

回答

1

您的JSON的第一部分看起来是这样的,当“漂亮打印” -

{ 
    "Data 1":{ 
     "2012-12-01":[ 
      { 
       "field 1":"field 2", 
       "summary":"summary 1" 
      }, 
      { 
       "field":"field 2", 
       "summary":"summary 2" 
      }, 
      { 
       "service":"service 3", 
       "summary":"summary 3" 
      } 
     ], 
     "2012-12-10":[ 
      { 
       "field":"field 1", 
       "summary":"summary 1" 
      }, 
      { 
       "field":"field 2", 
       "summary":"summary 2" 
      } 
     ], 
     "2012-12-31":[ 
      { 
       "field":"field 1", 
       "summary":"summary 1" 
      } 
     ] 
    }, 
    "Data 2":{ 
     "2013-01-4":[ 

的JSON的最外层部分是一本字典(JSON称之为“对象”) - 你可以告诉开放{。在该字典中是一个称为“数据1”的键/对象。该对象是一个字典(另一个{),其第一个键/对象对称为“2012-12-01”。这第二对的对象是一个包含三个字典的数组([)。等

1

我从来没有使用SBJSON专门而是由它的外观,你应该能够只是做:

(这是假设您的JSON是目前一个NSString)

NSDictionary *arrayOfJSONString = [SBJsonObject objectWithString:jsonString]; 

什么与此类似。

有时候我个人会用JSONKit。它很小,只有一个.h/.m才能包含在你的项目中。 (它也包含在RestKit中)。在这种情况下,你只需要做:

NSDictionary *jsonDict = [jsonString objectFromJSONString]; 

然后你可以使用它像:

NSDictionary *dataOne = [jsonDict objectForKey:@"Data 1"]; 

如果你想创建Objc-C类,而不是我想看看RestKit

2

解析JSON是一行命令。如果您想使用内置的iOS 5的JSON解析器和以后,NSJSONSerialization它只是:如果你想使用SBJSON

NSError *error; 
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data 
                  options:0 
                  error:&error]; 

,它是:

SBJsonParser *parser = [[SBJsonParser alloc] init]; 
NSDictionary *dictionary = [parser objectWithData:data]; 

不管怎样,现在你已经有了您在NSDictionary JSON,你可以继续恰当地处理它,比如:

NSDictionary *data1 = [dictionary objectForKey:@"Data 1"]; 
NSArray *arrayDecFirst2012 = [data1 objectForKey:@"2012-12-01"]; 
NSDictionary *firstDictionaryInDecFirst2012 = [arrayDecFirst2012 objectAtIndex:0]; 
NSString *fieldOne = [firstDictionaryInDecFirst2012 objectForKey:@"field 1"]; 

或者,如果你想使用新的下标符号,这将是:

NSDictionary *data1 = dictionary[@"Data 1"]; 
NSArray *arrayDecFirst2012 = data1[@"2012-12-01"]; 
NSDictionary *firstDictionaryInDecFirst2012 = arrayDecFirst2012[0]; 
NSString *fieldOne = firstDictionaryInDecFirst2012[@"field 1"];