首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

iOS POST 請求 Body 需帶大括號 { "HomeType": "1" } 之正確 JSON 序列化方式

     編輯:程式設計疑難解答

核心結論

伺服器要求 JSON 物件(以 {} 包裹),而非裸鍵值對。iOS 需將 Dictionary 序列化為 JSON Data,並設定正確的 Content-Type。

標準實作

let url = URL(string: "https://api.example.com/endpoint")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")

let body = ["HomeType": "1"] // Dictionary
do {
    request.httpBody = try JSONSerialization.data(withJSONObject: body, options: [])
} catch {
    print("JSON 序列化失敗: \(error)")
    return
}

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let error = error { print("請求失敗: \(error)"); return }
    guard let httpResponse = response as? HTTPURLResponse else { return }
    print("狀態碼: \(httpResponse.statusCode)")
    if let data = data, let str = String(data: data, encoding: .utf8) {
        print("回應: \(str)")
    }
}
task.resume()

關鍵細節

項目正確值錯誤示範
HTTP MethodPOSTGET
Content-Typeapplication/jsonapplication/x-www-form-urlencoded
Body 資料JSONSerialization.data(from: dict)字串拼接 "{HomeType:1}"
大括號JSON 物件自動包含手動拼接易漏逗號/引號

進階:Codable 模型驅動

struct RequestBody: Codable {
    let homeType: String
    enum CodingKeys: String, CodingKey { case homeType = "HomeType" }
}

let body = RequestBody(homeType: "1")
request.httpBody = try JSONEncoder().encode(body)
// JSONEncoder 輸出: {"HomeType":"1"}
  • 型別安全、重構友善、自動處理蛇形/駝峰轉換。

常見坑

  • 未設 Content-Type:伺服器拒絕解析 Body,回 400/415。
  • Dictionary Key 大小寫:JSON 區分大小寫,需與 API 文件完全一致。
  • 中文編碼:JSONSerialization 預設 UTF-8,正常;若手動拼接字串需 .data(using: .utf8)。

除錯技巧

// 印出實際發送的 JSON 字串
if let body = request.httpBody,
   let jsonStr = String(data: body, encoding: .utf8) {
    print("將發送: \(jsonStr)")
}

總結

使用 JSONSerialization 或 JSONEncoder 將 Dictionary/Model 轉為 Data,設定 Content-Type: application/json,即可產生帶大括號的標準 JSON Body,滿足伺服器需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved