анализ данных JSON - PullRequest
       4

анализ данных JSON

0 голосов
/ 28 января 2012

Мне нужно передать JSON в параметры POST.Входные параметры выглядят так:

{ "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:@"/users/%@/friends", [teamProfile valueForKey:@"userId"]];

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

Ответы [ 2 ]

1 голос
/ 28 января 2012

Если вы хотите передать 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];
0 голосов
/ 28 января 2012

Я не уверен, понял ли я то, что вы спрашиваете, но вы сказали, что вам нужно кодировать данные в JSON, и я не вижу никакой инструкции JSON для ваших параметров.Вы просто передаете NSDictionary * dictFriends ... Это правильно?

Увидимся!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...