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
相关产品推荐
相关产品推荐

