AFNetworking publica matrizes JSON como vários dicionários de entrada única

Estou tendo um problema semelhante ao discutidoaqui.

Estou tentando postar JSON em um servidor.

Aqui está o código Objective-C quedevemos trabalho, mas não. Recebo uma matriz vazia no objeto de resposta, não sei por que:

    AFHTTPRequestOperation * operation = [manager POST:uploadScriptUrl
      parameters:mutableJSON
      success:^(AFHTTPRequestOperation * operation, id responseObject) {
          successBlock(operation, responseObject);
      }
      failure:^(AFHTTPRequestOperation * operation, NSError * error) {
          failureBlock(operation, error);
      }];

Este código (que é adaptado do código que eu uso para fazer upload de imagens)MAIS OU MENOS trabalho. Sei que definitivamente não é a maneira aprovada de fazê-lo:

    AFHTTPRequestOperationManager * manager = [AFHTTPRequestOperationManager manager];
    AFJSONRequestSerializer * requestSerializer = [AFJSONRequestSerializer serializer];
    [requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    manager.requestSerializer = requestSerializer;

    AFHTTPRequestOperation * operation = [manager POST:uploadScriptUrl
    parameters:mutableJSON //passed in
    constructingBodyWithBlock:^(id <AFMultipartFormData> formData) {
        //Do nothing
   }
    success:^(AFHTTPRequestOperation * operation, id responseObject) {
        successBlock(operation, responseObject);
    }
    failure:^(AFHTTPRequestOperation * operation, NSError * error) {
        failureBlock(operation, error);
    }];

Ele publica meu JSON no servidor, mas, no processo de formulação da solicitação, o JSON é mutilado.

Aqui está como começa:

{
"key1": [
    {
        "dictionary1": {
            "param1": "value1",
            "param2": "value2",
            "array1A": [
                "value1",
                "value2"
            ],
            "array1B": [
                "value1",
                "value2"
            ]
        }
    }
]

}

e aqui está o que o AFNetworking envia para o servidor:

{
"key1": [
    {
        "dictionary1": {
            "array1A": [
                "value1"
            ]
        }
    },
    {
        "dictionary1": {
            "array1A": [
                "value2"
            ]
        }
    },
    {
        "dictionary1": {
            "array1B": [
                "value1"
            ]
        }
    },
    {
        "dictionary1": {
            "array1B": [
                "value2"
            ]
        }
    },
    {
        "dictionary1": {
            "param1": "value1"
        }
    },
    {
        "dictionary1": {
            "param2": "value2"
        }
    }
]

}

Aqui está o que Charles mostra para a solicitação. Você pode ver como a estrutura JSON já foi alterada na solicitação antes de o servidor tocar nos dados.

Aqui está o PHP que estou usando no servidor. Simplesmente por enquanto:

<?php

header('Content-type: application/json'); //Not sure if this is needed.

$json_string = json_encode($_POST);

header("HTTP/1.0 200 OK");
echo $json_string;

?>

Então, tudo isso dito, aqui estão minhas perguntas:

O AFNetworking lida com matrizes JSON aninhadas? Emesta página Mattt diz: "A estrutura que você está descrevendo não pode ser representativamente determinada com a codificação da string de consulta". Estou usando o POST, portanto, as cadeias de consulta não estão envolvidas. Mas talvez a limitação também exista com os dados do POST?

Também estou curioso para saber por que a chamada AFNetworking mais longa que incluiconstructingBodyWithBlock sucede enquanto o menor falha. No entanto, esta resposta é menos importante para mim. O método mais longo quase funciona e eu ficaria feliz em usá-lo se retornasse o mesmo JSON que enviei.

Obrigado a todos!

questionAnswers(4)

yourAnswerToTheQuestion