You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift遗留代码构造POST API复杂字典参数时myNotes未传递求助

问题描述

我维护的是一个遗留Swift代码库,需要向POST API传递字典参数。API要求的JSON格式片段如下:

{
  .......
  "notes": {
    "notesPreference": {
      "isCommonNotes": false,
      "isStudyNotes": false
    },
    "instruction": "No Instruction"
  }
}

现有参数构造代码片段:

var payload = [String: Any]()
...... // 其他已有的参数构造逻辑
payload["myNotes"] = ["instruction" : "No Instruction", "notesPreference" : [["isCommonNotes" : false , "isStudyNotes" : true ]] ]

调用API或打印时,payload["myNotes"]始终无法成功传递,代码未使用Codable,我是Swift和IT领域新手,希望得到问题原因和解决思路。

问题原因&解决思路

1. 键名不匹配

API要求的顶级字段键是notes,但你代码里用的是myNotes,这会导致API无法识别该字段,直接忽略。必须把键名改成"notes"。

2. notesPreference格式错误

API要求notesPreference是一个字典对象(用{}包裹),但你代码里写成了包含字典的数组(用[[]]包裹),完全不符合API格式要求。需要去掉外层的数组括号,改成普通字典结构。

修正后的代码

var payload = [String: Any]()
// 其他已有参数构造逻辑
payload["notes"] = [
    "instruction": "No Instruction",
    "notesPreference": [
        "isCommonNotes": false,
        "isStudyNotes": true
    ]
]

额外验证建议

修改后可以先把payload转成JSON数据打印,确认格式是否和API要求一致:

do {
    let jsonData = try JSONSerialization.data(withJSONObject: payload, options: .prettyPrinted)
    if let jsonString = String(data: jsonData, encoding: .utf8) {
        print(jsonString)
    }
} catch {
    print("JSON转换失败:\(error)")
}

如果打印出的JSON结构和API要求完全一致,再调用API就不会有问题了。

内容的提问来源于stack exchange,提问作者SarasKarsh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:42:34