Как получить данные из веб-службы json-rpc: iPad / iPhone / Objective C - PullRequest
4 голосов
/ 20 декабря 2010

Я работаю над проектом для iPad, и этот проект должен общаться с веб-сервисами json-rpc. Веб-сервисы основаны на Drupal с модулем: cck и views

1) Мне нужно вставить объект json в веб-сервис 2) Мне нужны данные обратного вызова из веб-сервиса

Я уже реализовал API SBJSON и API https://github.com/samuraisam/DeferredKit/ для проекта iPad.

API SBJSON работает нормально, и я понимаю это Samuriaisam DefferedKit - новый для меня

Мой вопрос: как получить данные из этого веб-сервиса json-rpc, есть ли у кого-нибудь пример кода? Или в некоторых местах, где я могу найти Objective C - документацию веб-сервиса json-rpc.

С уважением,

Барт Шун

--------- Обновление --------

Я сейчас использую этот код:

NSString *jsonString = @"{\"method\":\"views.get\",\"params\":{\"view_name\":\"client_list\",\"sessid\":\"xxxxxx\"},\"id\":1}";
    NSString *requestString = [NSString stringWithFormat:@"%@",jsonString,nil];

    NSLog(@"input: %@",jsonString);

    NSData *requestData = [NSData dataWithBytes: [jsonString UTF8String] length: [jsonString length]];

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString:@"http://subdomain.domain.com/services/json-rpc"]];

    NSString *postLength = [NSString stringWithFormat:@"%d", [requestData length]];
    [request setHTTPMethod: @"POST"];
    [request setValue:@"Content-type: application/json" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:requestData];

    //Data returned by WebService
    NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil ];
    NSString *returnString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding];
    NSLog(@"output: %@",returnString);

Это приведет к получению этого сообщения от сервера:

{"error":{"name":"JSONRPCError","code":-32600,"message":"The received JSON not a valid JSON-RPC Request"},"version":"1.1"}

--------- / Update --------

Что не так? Кто-нибудь сталкивался с этим?

С уважением,

Барт Шун

Ответы [ 2 ]

1 голос
/ 20 декабря 2010

Прочитайте файл JSon и получите эти данные.

NSDictionary * dictionary = [jsonString JSONValue]; Вы получите пару ключ / значение. Сохраните эти данные в вашей соответствующей переменной.

0 голосов
/ 05 января 2011
   -(IBAction)testCall{
     NSString *requestString = [NSString stringWithFormat:@"method=views.get&view_name=client_list",nil];
     NSLog(requestString);


     NSData *requestData = [NSData dataWithBytes: [requestString UTF8String] length: [requestString length]];


     NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: @"http://.xxxxxxxxx.nl/services/json"]];

     NSString *postLength = [NSString stringWithFormat:@"%d", [requestData length]];
     [request setHTTPMethod: @"POST"];
     [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
     [request setHTTPBody: requestData];

     //Data returned by WebService
     NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil ];
     NSString *returnString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding];

     NSLog(returnString);
     NSDictionary *dict = [returnString JSONValue];

    }

Только не используйте json-rpc - будьте проще и используйте json обычный метод jSon;)

...