Php AFNetworking将JSON数组发布为多个单条目字典

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

我有一个与讨论的问题类似的问题

我正在尝试将JSON发布到服务器

下面是Objective-C代码,它应该可以工作,但不能。我在响应对象中得到一个空数组,不确定原因:

    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)];