2012-01-28 13 views
0

POSTパラメータにjsonを渡す必要があります。 入力paramsが次のようになります。parse json data

{ "type":"facebook", 
    "friends":[{ "id": "facebook id", "avatar": "url to avatar image", "first_name" : "first_name", "last_name" :"last_name"}] } 

サーバーの応答エラーはそれが悪いリクエストパラメータ

Error - code: 400, message: {"status":"bad request","message":"undefined method `each' for #<String:0x00000005473e48>"} 

私は「友人」の部分でJSONデータを準備するとき、それは誤った可能性があります述べています。あなたは私のレビューを助けることができますか?

は、ここで私はあなたが求めるものを理解している場合、私はわからないんだけど、私のコード -

{ 
NSMutableArray *aFriends = [[NSMutableArray alloc] init]; 
int nCount = [[self savedSelIndexPath] count]; 

    for (int i = 0; i < nCount && nCount > 0; i++) 
    { 
     NSIndexPath *path = [[self savedSelIndexPath] objectAtIndex:i]; 
     NSDictionary *data = nil; 

      NSString *key = [[self keysArray] objectAtIndex:path.section]; 
      NSArray *nameSection = [[self listContentDict] objectForKey:key]; 
      data = [nameSection objectAtIndex:[path row]]; 

     NSDictionary *dictFriends = [NSDictionary dictionaryWithObjectsAndKeys: 
            [data objectForKey:@"id"], @"id", 
            [data objectForKey:@"picture"], @"avatar", 
            [data objectForKey:@"first_name"], @"first_name", 
            [data objectForKey:@"last_name"], @"last_name", 
            nil]; 

     [aFriends addObject:dictFriends]; 
     dictFriends = nil; 
    } 

DLog(@"aFriends: %@", aFriends); 

NSDictionary *teamProfile = [[Global sharedGlobal] getPlistFile]; 
NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: 
           @"facebook", @"type", 
           aFriends, @"friends", nil]; 
DLog(@"params: %@", params); 

NSString *sPath = [NSString stringWithFormat:@"https://stackoverflow.com/users/%@/friends", [teamProfile valueForKey:@"userId"]]; 

NSMutableURLRequest *request = [[[Global sharedGlobal] httpClient] requestWithMethod:@"POST" path:sPath parameters:params]; 
DLog(@"request: %@", request); 
…. 
[aFriends release]; 
    } 

答えて

0

ですが、あなたはJSONのデータをエンコードする必要があると述べ、私はあなたのパラメータの任意のJSONエンコード命令を見ることができません。あなたは単純にNSDictionary * dictFriendsを渡しています...それは正しいですか?

あなたに会いましょう!

+0

ありがとうございます。私はSBJSON&AFNetworkingを使っていることを忘れてしまった。 httpClientのパラメータエンコーディングをAFJSONParameterEncodingに設定すると、問題が解決されます。 –

1

は、あなたはこのようにそれを設定する必要があり、サーバーにJSONを渡したい場合は、次の

NSMutableURLRequest *networkRequest; 
    networkRequest = [[NSMutableURLRequest alloc] initWithURL: 
          [NSURL URLWithString:[networkServerAddress stringByAppendingString:@""]]]; 
    send = [[json objectAtIndex:i] dataUsingEncoding:NSUTF8StringEncoding]; 
    //Set the headers appropriately 
    [networkRequest setHTTPMethod:@"POST"]; 
    [networkRequest setValue:@"application/json"  
      forHTTPHeaderField: @"Content-type"]; 
    [networkRequest setValue:[NSString stringWithFormat:@"%d", [send length]] 
      forHTTPHeaderField:@"Content-length"]; 
    [networkRequest setValue:@"application/json"  
      forHTTPHeaderField:@"Accept"]; 
    //Set the body to the json encoded string 
    [networkRequest setHTTPBody:send]; 

送信はNSDataのではなく、辞書にする必要があります。そのようなことをしたい場合は、最初に辞書を解析する必要があります。そこにJSONのための多くの良いパーサ/ライターがあります、私は個人的に好きでSBJsonを使用します。 SBJsonを使用すると、次のようなことができます:

SBJsonWriter *writer = [[SBJsonWriter alloc] init]; 
NSData *dataToSend = [writer dataWithObject:data];