iphone下json的解析 NSJSONSerialization

openkk 12年前發布 | 67K 次閱讀 iPhone JSON iOS開發 移動開發

- (IBAction)JOSNButtonPressed:(id)sender {

NSString *str=[@"http://douban.fm/j/mine/playlist?type=n&h=&channel=0&from=mainsite&r=4941e23d79" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURLURLWithString :str];

// 構造 ASIHTTPRequest 對象

ASIHTTPRequest *request = [ASIHTTPRequestrequestWithURL:url];

// 開始同步請求

[request startSynchronous];

NSError *error = [request error];

assert (!error);



// 如果請求成功,返回 Response     // 對于2進制數據,使用:responseData

NSData *data = [request responseData];

NSString *tmp=[[NSStringalloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",tmp);

[tmp release];



// 返回一個JSON對象

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
NSArray *songArray = [json objectForKey:@"song"];

NSLog(@"song:%@",songArray);

/*

NSDictionary *aSony = [songArray objectAtIndex:0];

NSString *array = [aSony objectForKey:@"albumtitle"];

NSLog(@"albumtitle:%@",array);

 */

// 遍歷輸出JSON里song里的albumtitle

for(NSDictionary *aSony in songArray)

{

    NSString *array = [aSony objectForKey:@"albumtitle"];

    NSLog(@"albumtitle:%@",array);

}

}</pre>

// 自己構建一個JSON

  • (IBAction)createaJSON:(id)sender {

    NSDictionary *song = [NSDictionarydictionaryWithObjectsAndKeys:@"i can fly",@"title",@"4012",@"length",@"Tom",@"Singer", nil]; // isValidJSONObject判斷對象是否可以構建成json對象

    if ([NSJSONSerializationisValidJSONObject:song])

    {

      NSError *error;
    
      // 創造一個json從Data, NSJSONWritingPrettyPrinted指定的JSON數據產的空白,使輸出更具可讀性。
    
      NSData *jsonData = [NSJSONSerializationdataWithJSONObject:song options:NSJSONWritingPrettyPrintederror:&error];
    NSString *json =[[NSStringalloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    NSLog(@"json data:%@",json);

}

}</pre>

JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。 易于人閱讀和編寫。同時也易于機器解析和生成。 它基于JavaScript Programming LanguageStandard 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)。
  • </ul>

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

    JSON具有以下這些形式:

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

    iphone下json的解析 NSJSONSerialization

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

    iphone下json的解析 NSJSONSerialization

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

    iphone下json的解析 NSJSONSerialization

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

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

    iphone下json的解析 NSJSONSerialization

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

    iphone下json的解析 NSJSONSerialization

    空白可以加入到任何符號之間。

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!