iPhone下jsonの解析NSJSONSSerialization


- (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);

    }

}
//       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);

    }

}
JSON(JavaScript Object Notation)は、軽量レベルのデータ交換フォーマットです.読みやすく、書きやすい.同時に機械の解析と生成も容易である.JavaScript Programming Languageに基づいて Standard ECMA-2623 rd Edition-December 1999のサブセット.JSONは完全に言語から独立したテキスト形式を採用しているが、C言語ファミリーに似た習慣(C,C++,C#,Java,JavaScript,Perl,Pythonなどを含む)も使用している.これらの特性はJSONを理想的なデータ交換言語にした.
JSONは2つの構造に構築されています.
  • 「名称/値」ペアの集合(A collection of name/value pairs).異なる言語では、オブジェクト(object)、レコード(record)、構造(struct)、辞書(dictionary)、ハッシュテーブル(hash table)、キーリスト(keyed list)、または関連配列(associative array)として理解されます.
  • 値のあるシーケンステーブル(An ordered list of values).ほとんどの言語では、配列(array)として理解されています.
  • これらは一般的なデータ構造です.実際、現代のコンピュータ言語の大部分は何らかの形でサポートされています.これにより、同じようにこれらの構造に基づいたプログラミング言語間でデータフォーマットの交換が可能になる.
    JSONは以下の形式を有する.
    オブジェクトは無秩序な「名前/値」ペアのセットです.オブジェクトは「{」(左かっこ)で始まり、「}」(右かっこ)で終わります.各名前の後に":"(コロン);「,」(カンマ)で区切られた「名前/値」ペア.
    iphone下json的解析 NSJSONSerialization_第1张图片
    配列は値(value)の秩序化された集合です.配列は[](左中括弧)で始まり、[](右中括弧)で終わります.値の間に「,」(カンマ)で区切ります.
    iphone下json的解析 NSJSONSerialization_第2张图片
    値(value)は、二重引用符で囲まれた文字列(string)、数値(number)、truefalse・、  null、オブジェクト(object)または配列(array).これらの構造はネストできます.
    iphone下json的解析 NSJSONSerialization_第3张图片
    文字列(string)は、二重引用符で囲まれた任意の数のUnicode文字の集合であり、反斜線変換を用いる.1つの文字(character)は、個別の文字列(character string)です.
    文字列(string)は、CまたはJavaの文字列によく似ています.
    数値(number)もCやJavaの数値とよく似ています.未使用の8進数と16進数のフォーマットを除去します.いくつかの符号化の詳細を除去します.
    iphone下json的解析 NSJSONSerialization_第4张图片
    空白は任意の記号の間に追加できます.以下に、完全な言語について説明します.