gpt4 book ai didi

json - 如何保证 Swift 4 中的有效 JSON?

转载 作者:搜寻专家 更新时间:2023-11-01 06:01:09 25 4
gpt4 key购买 nike

我正在尝试处理从服务返回的 JSON 数据。根据 JSON 验证器,JSON 是有效的并且非常简单:

[{"ID":"SDS-T589863","TotalRisk":0.2458,"TotalScore":641.032}] 

然而,尝试在我的 Swift 4 代码中解析它却神秘地(至少对我而言)无效。这是我解析它的尝试:

 // make the request
let task = session.dataTask(with: urlRequest) {
(data, response, error) in
// check for any errors
guard error == nil else {
print(error!)
return
}
// make sure we got data
guard let responseData = data else {
print("Error: did not receive data")
return
}

// this is fine:
guard let ddd = String(bytes: responseData, encoding: String.Encoding.utf8) else {
print("can't")
return
}

print(ddd) // prints [{"ID":"SDS-T589863","TotalRisk":0.2458,"TotalScore":641.032}] happily

do {
// cannot serialize
guard let risk = try JSONSerialization.jsonObject(with: responseData, options: [JSONSerialization.ReadingOptions.allowFragments])
as? [String: Any]
else {
print("error trying to convert data to JSON")
return
}
print(risk)
} catch {
print("error trying to convert data to JSON")
return
}
}
task.resume()

}

假设我无法控制 JSON 对象或它返回给我的格式,有没有办法告诉我 JSON 有什么问题并可能格式化响应以便它可以正确序列化?

最佳答案

您应该将数据转换为 [[String: Any]] 类型,因为响应中有数组。

您正在尝试转换为 [String: Any],但您有一个 [String: Any] 数组,因为您的响应包含在 [] 中 括号。

例子:

let risk = try JSONSerialization.jsonObject(with: responseData, options: [JSONSerialization.ReadingOptions.allowFragments]) as? [[String: Any]]

或者,如果您只想从响应中获取一个[String: Any] 对象,您可以这样写:

let risk = (try JSONSerialization.jsonObject(with: responseData, options: [JSONSerialization.ReadingOptions.allowFragments]) as? [[String: Any]])?.first

或者,如果您的对象可以是数组或不是数组(但这听起来有点奇怪),您可以尝试转换为几种可能的类型。

关于json - 如何保证 Swift 4 中的有效 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50088757/

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