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!