我有一个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方法......但没有什么......
答案 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
。