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

Я работаю над проектом 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"}

---------/Обновить--------

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

С уважением,

Барт Шун


person Bart Schoon    schedule 20.12.2010    source источник


Ответы (2)


Прочитайте файл JSON, чтобы получить эти данные.

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

person Jyotsna Kadam    schedule 20.12.2010
comment
Спасибо за ваше сообщение. Не совсем то, что я ищу, я разместил новый код выше. У вас есть рекомендации? С уважением, Барт Шун - person Bart Schoon; 21.12.2010
comment
Привет, Барт. Вы проверили файл JSON, который вы получаете, является ли он действительным или нет. В противном случае вы можете попробовать использовать другой файл JSON для временных целей. Тем не менее, если вы получите ту же ошибку, посмотрите эту ссылку: groups.google.com/group/json-rpc/web/json-rpc-1-2-proposal - person Jyotsna Kadam; 21.12.2010
comment
Хорошо, это работает. Я решил использовать обычный метод json в Drupal вместо версии rpc. Итак, теперь я отправляю некоторые переменные POST на сервер и получаю строку json Back. Спасибо за помощь! - person Bart Schoon; 24.12.2010

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

person Bart Schoon    schedule 05.01.2011