如何从一个json-rpc webservice获取数据:iPad / iPhone / Objective C

4
我正在进行一个iPad项目,该项目需要与json-rpc web服务通信。该web服务基于Drupal,并使用模块:cck和views。
1)我需要将一个json对象推送到web服务中 2)我需要从web服务中获取回调数据
我已经实现了SBJSON API和https://github.com/samuraisam/DeferredKit/ API到iPad项目中。
SBJSON API工作正常,我也理解这个API。 Samuriaisam DefferedKit是新的,我不太了解。
我的问题是如何从这个json-rpc web服务中获取数据,有人有一些示例代码吗?或者一些可以找到Objective C - json-rpc web服务文档的地方。
此致敬礼,
Bart Schoon
---------更新--------
我现在使用这段代码:
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"}

---------/更新--------

出了什么问题?有人有相关经验吗?

顺祝商祺,

Bart Schoon

2个回答

1

读取JSON文件并获取其中的数据。

NSDictionary *dictionary = [jsonString JSONValue]; 您将得到键值对。将该数据存储在相应的变量中。


谢谢您的帖子,不完全是我想要的,我在上面发布了一些新代码。您有什么建议吗?此致敬礼,Bart Schoon - Bart Schoon
嗨Bart,你有检查一下你收到的JSon文件是否有效吗?否则,你可以尝试使用其他JSon文件进行临时测试。如果仍然出现相同的错误,请查看此链接:http://groups.google.com/group/json-rpc/web/json-rpc-1-2-proposal - Jyotsna Kadam
好的,它可以工作了。我已经选择在Drupal中使用普通的JSON方法而不是RPC版本。现在我将一些POST变量发送到服务器并接收一个JSON字符串返回。感谢您的帮助! - Bart Schoon

0
   -(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格式即可 ;)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接