2013-01-25 103 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"];