0

我有一个 Symfony2 项目,它同时为 JQuery Web 客户端和 Objective C iPhone APP 提供服务。

JQuery 正确地将其 urlencoded 数据发送到服务器。在 Symfony2 控制器中使用$this->getRequest()->get('myKey');.

因此,数据以application/x-www-form-urlencoded.

为了不改变我的 Symfony 控制器(这恰好是我系统的整个 API,并且以我之前描述的形式有大约 200 个 AJAX 调用),我希望 Objective C 以完全相同的方式发送数据.

我得到了部分。我的意思是,我知道如何将简单的 NSDictionary 转换为 URI 参数格式。这就是代码(感谢 Michael Sivolobov)。

NSMutableArray* parametersArray = [[[NSMutableArray alloc] init] autorelease];
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    [parametersArray addObject:[NSString stringWithFormat:@"%@=%@", key, obj]];
}];
NSString* parameterString = [parametersArray componentsJoinedByString:@"&"];

但我知道的问题是要知道如何以类似的方式转换some more complex数据。例如嵌套的 NSArrays 和 NSDictionarys(在使用 JSON 时很常见)。任何人都知道在Objective C中将此类数据转换为URL(key1 = value1&key2 = value2等......)的任何方法?

编辑:我需要通过 url 发送的数据示例。

NSArray *myArray = [NSArray arrayWithObjects: @"Value2", @"Value3", nil];
NSDictionary *myDict = [NSDictionary dictionaryWithObjectsAndKeys: @"Value1", @"key1", myArray, @"Value2"];

JSON中的东西是{"key1": "value1", "key2": ["value2", "value3"]}

在将其传递给 Http POST 之前,Objective C 中获取该结构并将其转换为 URLencode 的最佳方法是什么?我以为会有一些 JSON 或 Cocoa 方法......但是什么都没有......

4

1 回答 1

1

天啊!为此,我不得不掸掉一些非常古老的 PHP 知识:http_build_query()

复杂的混合字典/数组对象的格式是base[key][key]…[key]=value

对于 JSON {"key1": "value1", "key2": ["value2", "value3"]},PHP 期望key1=value1&key2[0]=value3&key2[1]=value3作为 URL 编码的字符串 (so key1=value1&key2%5B0%5D=value3&key2%5B1%5D=value3)。


对于更复杂的示例:{"x": {"y": ["a", "b"]}, "z" : "c"},PHP 会期望x[y][0]=a&x[y][1]=b&z=c.

于 2013-06-18T11:53:32.157 回答