我遇到類似問題,與討論的here類似。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);
}];
此代碼KIND作品(從代碼,我用它來上傳圖片改編)。我知道這是絕對不認可的方式來做到這一點:
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陣列?在this page Mattt說:「你描述的結構不能確定性地用查詢字符串編碼表示。」我使用POST,所以查詢字符串不涉及。但是,POST數據也可能存在限制?
我也很好奇爲什麼包含
constructingBodyWithBlock
的較長的AFNetworking呼叫成功,而較短的失敗。但是,這個答案對我來說並不重要。更長的方法幾乎可以工作,如果它返回了我發送的相同JSON,我很樂意使用它。
謝謝大家!
我已經這樣做了,但沒有包含在帖子中。應該有,但帖子似乎非常長。我編輯了原始文章以包含它。 感謝您澄清的限制和他們來自哪裏。 那麼,我會如何去上傳我選擇的任何複雜的JSON? – shmim