AFNetworking публикует массивы JSON в виде нескольких однократных словарей

У меня проблема, аналогичная обсуждаемойВот.

Я пытаюсь опубликовать 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 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);
    }];

Он отправляет мой JSON на сервер, но в процессе формулирования запроса JSON искажается.

Вот как это начинается:

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

}

и вот что AFNetworking отправляет на сервер:

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

}

Вот что показывает Чарльз по запросу. Вы можете увидеть, как структура JSON уже была изменена в запросе до того, как сервер коснулся данных.

Вот PHP, который я использую на сервере. Просто пока просто:

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

?>

Итак, все сказанное, вот мои вопросы:

Поддерживает ли AFNetworking вложенные массивы JSON? Наэта страница Мэтт говорит: «Структура, которую вы описываете, не может быть детерминировано представлена в кодировке строки запроса». Я использую POST, поэтому строки запроса не участвуют. Но, может быть, существует ограничение и для данных POST?

Мне также любопытно, почему более длинный вызов AFNetworking, который включает в себяconstructingBodyWithBlock успех, в то время как более короткий отказывает. Однако этот ответ менее важен для меня. Более длинный метод почти работает, и я был бы рад использовать его, если бы он возвращал тот же JSON, который я отправляю.

Спасибо всем!

Ответы на вопрос(4)

Ваш ответ на вопрос