gpt4 book ai didi

json - 如何在 swift 4 的 httpBody 中同时发送字符串值和 json 值

转载 作者:搜寻专家 更新时间:2023-11-01 07:03:32 24 4
gpt4 key购买 nike

我有一个条件,我必须在字符串中发送 body 的两个值,在 JSON 中发送另一个值

我的结构:

struct AttendancePost : Codable {
let acad_id :String
let school_id :String
let class_id:String
let section_id:String
let stdid:String
var status:String
let attendant_id:String

}

我在模型中以这种方式插入了数据:

let singldata = AttendancePost(acad_id: data.acad_id!, school_id: SCHOOL_ID, class_id: self.classFID, section_id: self.secID, stdid: data.stdid!, status: "1", attendant_id: savedsesuid!)

self.dataToPost.append(singldata)

var dataToPost = [AttendancePost]()


let jsonEncoder = JSONEncoder()
let jsonData = try? jsonEncoder.encode(dataToPost)
let postData = try? JSONSerialization.data(withJSONObject: jsonData, options: JSONSerialization.WritingOptions.prettyPrinted)

let theBody = "attendance_details=\(jsonData)" + "&user_id=\(savedsesuid!)" + "&school_id=" + SCHOOL_ID

request.httpBody = theBody.data(using: .utf8)

我收到这个错误:

'NSInvalidArgumentException', reason: '*** +[NSJSONSerialization dataWithJSONObject:options:error:]: Invalid top-level type in JSON write'

最佳答案

问题

此代码存在一些问题,首先,您将 singldata 附加到名为 dataToPost 的类(或类型)属性。然后,您将创建一个同名的局部变量(即 dataToPost),它使用 AttendancePost 类型的空数组进行初始化。然后,您将这个局部变量 dataToPost(包含一个空数组)传递给您的 JSONEncoder,然后再尝试使用 JSONSerialization 使用编码器创建的 JSON,这是引发错误的地方。

解决方案

出现此错误是因为您使用来自 JSONEncoder 的数据,而不是 Foundation 对象(例如字典或数组)作为 JSONObject 值。删除或注释掉

let postData = try? JSONSerialization.data(withJSONObject: jsonData, options: JSONSerialization.WritingOptions.prettyPrinted)

错误将消失。但这不会是您问题的终结。首先,您应该按如下方式构建代码的主体部分:

let jsonEncoder = JSONEncoder()
let jsonData = try? jsonEncoder.encode(dataToPost)
var theBody = Data()
if let a = "attendance_details=".data(using: .utf8) {
theBody.append(a)
}

theBody.append(jsonData)

let str = "&user_id=\(savedsesuid!)" + "&school_id=" + SCHOOL_ID
if let b = str.data(using: .utf8) {
theBody.append(b)
}

request.httpBody = theBody

最后,如果将前三行代码简单地简化为:

let dataToPost = AttendancePost(acad_id: data.acad_id!, school_id: SCHOOL_ID, class_id: self.classFID, section_id: self.secID, stdid: data.stdid!, status: "1", attendant_id: savedsesuid!)

如上所述,目前您的代码正在将一个空数组传递给 JSONEncoder 实例。

注意:此代码未经测试并根据内存编写,但出现的任何编译器警告应该很容易解决。

关于json - 如何在 swift 4 的 httpBody 中同时发送字符串值和 json 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49609378/

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