如何将 NSDictionaries 的 NSArray 添加到 AFJSONRequestSerializer 请求?
How do I add an NSArray of NSDictionaries to a AFJSONRequestSerializer request?
我写了一些代码将 NS(Mutable)Dictionary 放入 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 序列化器添加到我的请求中。
AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = serializer;
我 运行 你的代码在我的 x 代码中得到了以下输出:
{
users = (
{
name = John;
"user_id" = 123;
}
);
}
这正是您所期望的,我认为您的代码没有任何错误,所以请再次检查,否则,我也会得到错误的答案。
看来我需要将 JSON 序列化程序添加到我的请求中。
AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = serializer;
我写了一些代码将 NS(Mutable)Dictionary 放入 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 序列化器添加到我的请求中。
AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = serializer;
我 运行 你的代码在我的 x 代码中得到了以下输出:
{
users = (
{
name = John;
"user_id" = 123;
}
);
}
这正是您所期望的,我认为您的代码没有任何错误,所以请再次检查,否则,我也会得到错误的答案。
看来我需要将 JSON 序列化程序添加到我的请求中。
AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = serializer;