gpt4 book ai didi

json - JSON 中无效的顶级类型写入 Swift 4

转载 作者:行者123 更新时间:2023-11-28 14:06:47 25 4
gpt4 key购买 nike

我正在尝试学习 JSON 解析。我在 Laravel 中编写了一个 API,它返回 status : 200 作为响应。我做的是这样的:

guard let url = URL(string: "http://localhost/workon-api/public/api/register") else { return }

var request = URLRequest(url: url)

request.httpMethod = "POST"

request.addValue("application/json", forHTTPHeaderField: "Content-Type")

let newUser = User.init(name: "Rob", email: "abc@gmail.com", password: "12345678")

do {

let jsonBody = try JSONEncoder().encode(newUser)

request.httpBody = jsonBody

} catch { }

URLSession.shared.dataTask(with: request) { (data, response, error) in

guard let data = data else { return }

do {

let json = try JSONSerialization.data(withJSONObject: data, options: .prettyPrinted)

print(json)

} catch {}

}.resume()

现在,我收到此错误:JSON 写入中的顶级类型无效 并且应用程序崩溃。经过搜索,我使用了这个:

let json = try JSONSerialization.jsonObject(with: data, options: [])

而且,它有效。为什么以前的方法不起作用?而且,如果我尝试返回收集到的 userInfo,我会得到这样的响应。

status = "{\"name\":\"Rob\",\"email\":\"abc@gmail.com\",\"password\":\"12345678\"}";

为什么那里有反斜杠?这些可以吗?还有,什么是 Gzip 数据?我知道我问了很多,但我需要理解这一点。提前致谢。

附言: 这是用户模型。

struct User: Encodable {

let name : String?

let email : String?

let password : String?

}

最佳答案

首先,反斜杠是虚拟的。框架添加它们以便能够在文字字符串中打印双引号。

其次,dataTask 返回序列化的 JSON Data,因此要从必须调用 jsonObject(with) 的数据中获取字典或数组。

let object = try JSONSerialization.jsonObject(with: data)
print(object)

关于json - JSON 中无效的顶级类型写入 Swift 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52924375/

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