【发布时间】:2018-12-02 14:45:48
【问题描述】:
所以我得到了以下 json :
{
"output": [
"{\"cameraIsOnboarded\" : true}"
],
"exit_code": 0
}
我尝试使用以下模型对其进行解码:
struct CameraOnboard: Codable {
var output: [Output]
//var exit_code: Int?
}
struct Output: Codable {
var cameraIsOnboarded: Bool?
}
然后在我的解析器中使用它:
let infoString = try JSONDecoder().decode(CameraOnboard.self, from: data)
但它会卡住。
然后我尝试使用 JSONSerialization,因为我认为我的 \"cameraIsOnboarded\" 键有问题,所以我从 alamofire 结果字符串中获取并尝试了以下操作:
let jsonData = data.data(using: .utf8)
var dic: [String : Any]?
do {
dic = try JSONSerialization.jsonObject(with: jsonData!, options: []) as? [String : Any]
} catch {
print(error.localizedDescription)
}
print(dic!)
if let outPutArr = dic?["output"] as? NSArray {
print(outPutArr)
if let first = outPutArr.firstObject {
print(first)
//let val = first["cameraIsOnboarded"]
// print(val!)
}
}
所以如上所述我不知道如何提取值但我打印:
{“cameraIsOnboarded”:真}
如果我这样做:
if let first = outPutArr.firstObject as? [String: Bool] {
print(first)
//let val = first["cameraIsOnboarded"]
// print(val!)
}
它突然走进去。
谢谢
【问题讨论】:
-
你的 JSON 很奇怪。
output的值是字符串数组,而不是字典数组。这就是您的 Codable 尝试失败以及 JSONSerialization 遇到问题的原因。 -
@rmaddy 从后端获取此 JSON。使用 JSONSerialization 我无法成功提取 bool
-
您的后端需要修复 JSON。
"{\"cameraIsOnboarded\" : true}"是一个字符串,而不是字典。应该是{"cameraIsOnboarded" : true} -
@rmaddy 我知道,但在他们这样做之前,我该如何处理?
-
一种方法是将字符串转换为数据并将该数据传递给 JSONSerialization。
标签: ios json swift jsondecoder json-serialization