目标C:如何将嵌套的NSDictionarys和NSArrays转换为URLEncoded字符串

时间:2013-06-18 10:45:32

标签: objective-c url post nsarray nsdictionary

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

JQuery将其urlencoded数据正确发送到服务器。使用$this->getRequest()->get('myKey');在Symfony2 Controller中正确访问的数据。

因此,数据将在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等等)的任何方法吗?

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

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

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

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

1 个答案:

答案 0 :(得分: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编码字符串(因此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