2012-04-24 14 views
12
私は次のようにJSONデータにNSDictionariesの配列を変換しています

...私のデータを作成しますの変換にNSArray - > JSON - >のNSData - > PHPサーバー - > JSON表現

...

NSMutableArray *arrayOfDicts = [[NSMutableArray alloc] init]; 

for (int i = 0; i < 2; i++) { 
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: 
            @"MySong", @"title", 
            @"MyArtist", @"artist", 
            nil]; 
    [arrayOfDicts addObject:dict];   
} 
NSArray *info = [NSArray arrayWithArray:arrayOfDicts]; 
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:info 
     options:NSJSONWritingPrettyPrinted error:&error]; 
私はからそれを印刷する場合

はその後...

NSURL *url = [NSURL URLWithString:@"http://www.mywebsite.com/index.php"]; 
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
    [request setPostValue:jsonData forKey:@"songs"]; 
    [request setDelegate:self]; 
    request.tag = TAG_LOAD_SONGS; 
    [request startAsynchronous]; 

この

は私のサーバーへのNSDataを送信しているが、どのように私は、PHPでそれを使うのですか...そうのような乱数のその本当にちょうど束を送信します私のサーバー、私はあなたを試みたjson_encodeを歌いますが、私はそれが生データのために意味するとは思わない...

助けが素晴らしいだろう!

EDIT:ここ は、PHPの応答である...ここで

echo $_POST['songs']; 

<5b0a2020 7b0a2020 20202274 69746c65 22203a20 224d7953 6f6e6722 2c0a2020 20202261 72746973 7422203a 20224d79 41727469 7374220a 20207d2c 0a20207b 0a202020 20227469 746c6522 203a2022 4d79536f 6e67222c 0a202020 20226172 74697374 22203a20 224d7941 72746973 74220a20 207d0a5d> 

はXcodeでNSLogingへの応答である...

NSLog(@"Info: %@", info); 

情報:( { アーティスト= MyArtist ; title = MySong; }、 { artist = MyArtist; title = MySong; } )

+0

PHP側で受け取る文字列はどのように見えますか? – deceze

+0

これは確かにJSONではありません。 PHPでデータを送信するのではなく、データを送信する際の問題のようです。 – deceze

+0

よく分からないことが分かりません。私のオブジェクトをどのように作成するかで私の質問を編集してください... – Eric

答えて

20

私はこのようにそれを行うために必要と判明:私のデータを作成する

NSMutableArray *arrayOfDicts = [[NSMutableArray alloc] init]; 

for (int i = 0; i < 2; i++) { 
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: 
            @"MySong", @"title", 
            @"MyArtist", @"artist", 
            nil]; 
    [arrayOfDicts addObject:dict];   
} 
NSArray *info = [NSArray arrayWithArray:arrayOfDicts]; 

そして、このようにそれを送信:鍵は情報を変換することでした

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:info 
      options:NSJSONWritingPrettyPrinted error:&error]; 
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 

    // Start request 
    NSURL *url = [NSURL URLWithString:@"http://www.mywebsite.com/index.php"]; 
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
    [request setPostValue:jsonString forKey:@"songs"]; 
    [request setDelegate:self]; 
    [request startAsynchronous]; 

NSDataに、次に私は自分のサーバーに送信したJSON Stringに、NSDataのrawを送信するだけではありません。

ありがとうございました。

+0

なぜ変換しましたか最初にNSDataに?代わりにJSON文字列を与えるインターフェイスを使用してください。 –

+0

ああ、私は見る - クライマックスAppleインターフェイスは、JSON文字列を生成するインターフェイスを持っていません –

+0

はい、ああ、それは私が、サードパーティのライブラリを使用するのではなく、Applesの実装を使用しようとしているからです。 – Eric

1

<?php $array = json_decode($_POST['songs']); ?>が動作するはずです。

+0

私が$ arrayをエコーし​​ても何も表示されません...しかし、私はデータを送信していることを知っています...私が$ _POST ['songs']をエコーすると、数字の数字が出力されるからです... – Eric

+0

この質問に数字を貼り付けることはできますか?また、単純に:NSLog(@ "%@"、info); ' – QED

+0

データの数千行も...あなたのObj-C 'info'オブジェクトを貼り付けてください。基本的には、PHPではなくxcodeから同じデータを出力しますが、NSString * string = NSString * jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]を使用すると、私はデータの完全なjson文字列表現を見ることができます。 – Eric

1

このように送信することはできません。 NSJSONSerializationはiOS用です。それは基本的にplistです。あなたはPHPでそれをデコードする方法が必要であり、それが存在するのではないかと疑います。代わりに、JSON文字列を送信する必要があります。私はあなたが "タイトルの周りに引用符を残す"という意味をよく分かりません。彼らは最初に何をしていますか?元のJSON文字列hereを確認できますか?

+0

私は現在、文字列を送信しています(検証をパスします)...しかし、文字列は.. [{"title": "MySong"}のように送られ、[{\ "title \":\ " MySong \ "}]と私は" \ "デコードを台無しにしていると思いますか? – Eric

+0

私はそれを理解したと思う...私は、復号化する前にすべてのそれらのバックスラッシュを取り除くjson_decode(stripslashes($ host_songs))を使用します。 – Eric

+0

それはエスケープされています。あなたはPOST経由でこれを送りますか?引用はURLセーフではありません。あなたは最初に文字列を整理する必要があります:%22 – borrrden

関連する問題