Php AFNetworking将JSON数组发布为多个单条目字典
我有一个与讨论的问题类似的问题 我正在尝试将JSON发布到服务器 下面是Objective-C代码,它应该可以工作,但不能。我在响应对象中得到一个空数组,不确定原因:Php AFNetworking将JSON数组发布为多个单条目字典,php,ios,objective-c,afnetworking,afnetworking-2,Php,Ios,Objective C,Afnetworking,Afnetworking 2,我有一个与讨论的问题类似的问题 我正在尝试将JSON发布到服务器 下面是Objective-C代码,它应该可以工作,但不能。我在响应对象中得到一个空数组,不确定原因: AFHTTPRequestOperation * operation = [manager POST:uploadScriptUrl parameters:mutableJSON success:^(AFHTTPRequestOperation * operation, id responseObj
AFHTTPRequestOperation * operation = [manager POST:uploadScriptUrl
parameters:mutableJSON
success:^(AFHTTPRequestOperation * operation, id responseObject) {
successBlock(operation, responseObject);
}
failure:^(AFHTTPRequestOperation * operation, NSError * error) {
failureBlock(operation, error);
}];
这段代码(根据我用来上传图像的代码改编)是一种工作。我知道这绝对不是被认可的方式:
AFHTTPRequestOperationManager*manager=[AFHTTPRequestOperationManager];
AFJSONRequestSerializer*requestSerializer=[AFJSONRequestSerializer];
[requestSerializer setValue:@“应用程序/json”用于HttpHeaderField:@“内容类型”];
[requestSerializer设置值:@“应用程序/json”用于HttpHeaderField:@“接受”];
manager.requestSerializer=requestSerializer;
AFHTTPRequestOperation*operation=[manager POST:uploadScriptUrl
参数:mutableJSON//传入
constructingBodyWithBlock:^(id Mattt说:“您描述的结构不能用查询字符串编码来确定地表示。”我使用的是POST,因此不涉及查询字符串。但POST数据可能也存在限制
我也很好奇为什么包含constructingBodyWithBlock
的较长的AFNetworking调用成功,而较短的调用失败。然而,这个答案对我来说不太重要。较长的方法几乎可以工作,如果它返回我发送的相同JSON,我很乐意使用它
谢谢大家
我使用的是POST,所以不涉及查询字符串。但是POST数据可能也存在限制
限制不在POST上,而是URL表单编码。我接着说,您应该编码为JSON,这可以通过对manager进行以下配置更改来实现:
manager.requestSerializer=[AFJSONRequestSerializer];
另外,除非您实际上正在构造一个多部分请求,否则不要使用该方法的constructingBodyWithBlock
版本。我刚刚处理了同样的问题,我能找到的唯一解决方案是从数组中创建一个字典。一定有更好的方法,这非常难看
NSMutableDictionary *arrayDict = [[NSMutableDictionary alloc] init];
int counter = 0;
for (NSMutableDictionary *arrayItem in arrayToSend) {
[arrayDict setObject:arrayItem forKey:[NSNumber numberWithInt:counter]];
counter++;
}
否则一切都会变得平淡。我使用AFJSONRequestSerializer,但这似乎并不重要。丑陋的解决方案是为弱者准备的:
这篇文章的答案包含了你所需要的一切。我最近也遇到了这个问题,我有以下参数要发送到服务器,但是“功能”数组被分成4个部分,而不仅仅是2个字典
{ "description": "Temporary Description",
"name": "Product Name",
"feature": [
{
"fkey": "FT1",
"fvalue": "FD1"
},
{
"fkey": "FT2",
"fvalue": "FD2"
}
]
}
所以我改变了主意
afurlRequestSerialization.m
替换了AFQueryStringPairsFromKeyAndValue(NSString*key,id-value)
方法中的此行
[mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue([NSString stringWithFormat:@"%@[]", key], nestedValue)];
与
这确实起到了作用。我希望这可能会对某些人有所帮助。我已经这样做了,但没有将其包含在帖子中。应该这样做,但帖子似乎太长了。我编辑了原始帖子以将其包含在内。感谢您澄清这些限制以及它们的来源。那么,我该如何上传我选择的任何复杂的JSON呢?这是在url查询中必须发送数据时获取编码的最简单方法
{ "description": "Temporary Description",
"name": "Product Name",
"feature": [
{
"fkey": "FT1",
"fvalue": "FD1"
},
{
"fkey": "FT2",
"fvalue": "FD2"
}
]
}
[mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue([NSString stringWithFormat:@"%@[]", key], nestedValue)];
[mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue([NSString stringWithFormat:@"%@[%i]", key, [array indexOfObject:nestedValue]], nestedValue)];