AFNetworking publikuje tablice JSON jako wiele słowników pojedynczego wpisu

Mam podobny problem do omawianegotutaj.

Próbuję wysłać JSON na serwer.

Oto kod Objective-Cpowinien działa, ale nie działa. W obiekcie odpowiedzi otrzymuję pustą tablicę, nie wiem dlaczego:

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

Ten kod (dostosowany z kodu, którego używam do przesyłania obrazów)RODZAJ Prace. Wiem, że zdecydowanie nie jest to zatwierdzony sposób:

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

Wysyła mój JSON na serwer, ale w procesie formułowania żądania JSON jest zniekształcony.

Oto jak to się zaczyna:

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

}

i oto, co AFNetworking wysyła do serwera:

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

}

Oto, co Charles pokazuje na prośbę. Możesz zobaczyć, jak struktura JSON została już zmieniona w żądaniu, zanim serwer dotknął danych.

Oto PHP, którego używam na serwerze. Na razie proste:

<?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;

?>

Więc wszystko to powiedziało, oto moje pytania:

Czy AFNetworking obsługuje zagnieżdżone tablice JSON? Nata strona Mattt mówi: „Struktura, którą opisujesz, nie może być deterministycznie reprezentowana przez kodowanie ciągu zapytań”. Używam POST, więc ciągi zapytań nie są zaangażowane. Ale może ograniczenie dotyczy również danych POST?

Ciekawe też, dlaczego dłuższe połączenie AFNetworking obejmujeconstructingBodyWithBlock udaje się, gdy krótszy kończy się niepowodzeniem. Jednak ta odpowiedź jest dla mnie mniej ważna. Dłuższa metoda prawie działa i chętnie ją użyję, jeśli zwróci ten sam JSON, który wysyłam.

Dziękuje wszystkim!

questionAnswers(4)

yourAnswerToTheQuestion