如何将NSArray的NSArray添加到AFJSONRequestSerializer请求?

时间:2016-12-19 12:45:28

标签: ios objective-c nsarray nsdictionary afjsonrequestoperation

我写了一些代码将NS(Mutable)字典放在NSArray中。但是在将字典添加到数组之后,似乎它为每个键值对创建了单独的字典。见下面的例子。

NSMutableDictionary *info = [[NSMutableDictionary alloc] init];
[info setObject:@"123" forKey:@"user_id"];
[info setObject:@"John" forKey:@"name"];
NSArray *array = [NSArray arrayWithObject:info];

NSMutableDictionary *htmlParams = [[NSMutableDictionary alloc] init];
[htmlParams setObject:array forKey:@"users"];

预期产出:

{
    "users": [
        {
            "user_id": 123,
            "name": "John
        }
    ]

}

我得到了什么:

{
    "users": [
        {
            "user_id": 123,
        }, {
            "name": "John
        }
    ]

}

我做错了什么?

感谢您的帮助!!

编辑* 我尝试了更多的东西,似乎我想出了问题所在,但它对我来说仍然很奇怪。

一点背景:当我记录NSDictionary时,我确实获得了预期的输出。但是当我把它发送到我的后端时,它就搞砸了。

我创建了新的NSDictionaries(作为对象文字):

1:

NSDictionary *info = @{
    @[
        @{
            @"firstname": @"John",
            @"lastname": @"Doe",
        },
        @{
            @"firstname": @"Jane",
            @"lastname": @"Da",
        },
    ]
};

2:

NSDictionary *info = @{
        @0: @{
                @"firstname": @"John",
                @"lastname": @"Doe",
        },
        @1: @{
                @"firstname": @"Jane",
                @"lastname": @"Da",
        },
};

1:出错了,数组中的每一行都在后端输出为不同的字典。 2:表现得像预期的那样。

我不知道导致这个问题的原因,但我很确定它不是我的包(AFNetworking),也不是我的后端(Symfony PHP)。

编辑*

似乎我需要将Json Serializer添加到我的请求中。

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

2 个答案:

答案 0 :(得分:0)

我在我的x代码中运行你的代码我得到了以下输出:

{
users =     (
            {
        name = John;
        "user_id" = 123;
    }
);

}

这就是你所期待的,我不认为你的代码有任何错误,所以再次检查,否则,我也会得到错误的答案。

答案 1 :(得分:0)

似乎我需要将JSON Serializer添加到我的请求中。

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