gpt4 book ai didi

php - AFNetworking 将 JSON 数组发布为多个单条目字典

转载 作者:可可西里 更新时间:2023-11-01 04:21:08 27 4
gpt4 key购买 nike

我遇到的问题与讨论的问题类似 here .

我正在尝试将 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);
}];

此代码(改编 self 用来上传图片的代码)有点 有效。我知道这绝对不是批准的方式:

    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"
}
}
]

这是 Charles 为请求显示的内容。在服务器接触数据之前,您可以看到请求中的 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;

?>

综上所述,这是我的问题:

  1. AFNetworking 是否处理嵌套的 JSON 数组?在 this page Mattt 说:“你所描述的结构不能用查询字符串编码来确定地表示。”我正在使用 POST,因此不涉及查询字符串。但也许 POST 数据也存在限制?

  2. 我也很好奇为什么包含 constructingBodyWithBlock 的较长 AFNetworking 调用成功而较短的调用失败。但是,这个答案对我来说不那么重要。更长的方法几乎可以正常工作,如果它返回与我发送的相同的 JSON,我会很乐意使用它。

谢谢大家!

最佳答案

I'm using POST, so query strings are not involved. But maybe the limitation exists with POST data as well?

限制不在 POST 上,它是 URL 形式编码。我继续说你应该编码为 JSON,你可以通过对你的经理进行以下配置更改来做到这一点:

manager.requestSerializer = [AFJSONRequestSerializer 序列化器];

此外,除非您实际构建一个多部分请求,否则不要使用该方法的 constructingBodyWithBlock 版本。

关于php - AFNetworking 将 JSON 数组发布为多个单条目字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21344580/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com