歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

iPhone下JSON的解析 NSJSONSerialization

  1. - (IBAction)JOSNButtonPressed:(id)sender {  
  2.   
  3.     NSString *str=[@"http://douban.fm/j/mine/playlist?type=n&h=&channel=0&from=mainsite&r=4941e23d79" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
  4.   
  5.     NSURL *url = [NSURLURLWithString :str];  
  6.   
  7.     // 構造 ASIHTTPRequest 對象   
  8.   
  9.     ASIHTTPRequest *request = [ASIHTTPRequestrequestWithURL:url];  
  10.   
  11.     // 開始同步請求   
  12.   
  13.     [request startSynchronous];  
  14.   
  15.     NSError *error = [request error];  
  16.   
  17.     assert (!error);  
  18.   
  19.       
  20.   
  21.     // 如果請求成功,返回 Response     // 對於2進制數據,使用:responseData   
  22.   
  23.     NSData *data = [request responseData];  
  24.   
  25.     NSString *tmp=[[NSStringalloc] initWithData:data encoding:NSUTF8StringEncoding];  
  26.     NSLog(@"%@",tmp);  
  27.   
  28.     [tmp release];  
  29.   
  30.       
  31.   
  32.    // 返回一個JSON對象   
  33.   
  34.     NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];  
  35.     NSArray *songArray = [json objectForKey:@"song"];  
  36.   
  37.     NSLog(@"song:%@",songArray);  
  38.   
  39.     /* 
  40.  
  41.     NSDictionary *aSony = [songArray objectAtIndex:0]; 
  42.  
  43.     NSString *array = [aSony objectForKey:@"albumtitle"]; 
  44.  
  45.     NSLog(@"albumtitle:%@",array); 
  46.  
  47.      */  
  48.   
  49.     // 遍歷輸出JSON裡song裡的albumtitle   
  50.   
  51.     for(NSDictionary *aSony in songArray)  
  52.   
  53.     {  
  54.   
  55.         NSString *array = [aSony objectForKey:@"albumtitle"];  
  56.   
  57.         NSLog(@"albumtitle:%@",array);  
  58.   
  59.     }  
  60.   
  61. }  

 

  1. // 自己構建一個JSON   
  2.   
  3. - (IBAction)createaJSON:(id)sender {  
  4.   
  5.     NSDictionary *song = [NSDictionarydictionaryWithObjectsAndKeys:@"i can fly",@"title",@"4012",@"length",@"Tom",@"Singer", nil];  
  6.     // isValidJSONObject判斷對象是否可以構建成json對象   
  7.   
  8.     if ([NSJSONSerializationisValidJSONObject:song])  
  9.   
  10.     {  
  11.   
  12.         NSError *error;  
  13.   
  14.         // 創造一個json從Data, NSJSONWritingPrettyPrinted指定的JSON數據產的空白,使輸出更具可讀性。   
  15.   
  16.         NSData *jsonData = [NSJSONSerializationdataWithJSONObject:song options:NSJSONWritingPrettyPrintederror:&error];  
  17.           
  18.   
  19.         NSString *json =[[NSStringalloc] initWithData:jsonData encoding:NSUTF8StringEncoding];  
  20.         NSLog(@"json data:%@",json);  
  21.   
  22.     }  
  23.   
  24. }  

JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。 易於人閱讀和編寫。同時也易於機器解析和生成。 它基於JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個子集。 JSON采用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 這些特性使JSON成為理想的數據交換語言。

JSON建構於兩種結構:

  • “名稱/值”對的集合(A collection of name/value pairs)。不同的語言中,它被理解為對象(object),紀錄(record),結構(struct),字典(dictionary),哈希表(hash table),有鍵列表(keyed list),或者關聯數組 (associative array)。
  • 值的有序列表(An ordered list of values)。在大部分語言中,它被理解為數組(array)。

這些都是常見的數據結構。事實上大部分現代計算機語言都以某種形式支持它們。這使得一種數據格式在同樣基於這些結構的編程語言之間交換成為可能。

JSON具有以下這些形式:

對象是一個無序的“‘名稱/值’對”集合。一個對象以“{”(左括號)開始,“}”(右括號)結束。每個“名稱”後跟一個“:”(冒號);“‘名稱/值’ 對”之間使用“,”(逗號)分隔。

數組是值(value)的有序集合。一個數組以“[”(左中括號)開始,“]”(右中括號)結束。值之間使用“,”(逗號)分隔。

值(value)可以是雙引號括起來的字符串(string)、數值(number)、truefalse、 null、對象(object)或者數組(array)。這些結構可以嵌套。

字符串(string)是由雙引號包圍的任意數量Unicode字符的集合,使用反斜線轉義。一個字符(character)即一個單獨的字符串(character string)。

字符串(string)與C或者Java的字符串非常相似。

數值(number)也與C或者Java的數值非常相似。除去未曾使用的八進制與十六進制格式。除去一些編碼細節。

空白可以加入到任何符號之間。 以下描述了完整的語言。

Copyright © Linux教程網 All Rights Reserved