我从API调用中收到以下JSON。
{
"status" : "success",
"promotion" : {
"insert_list" : [
],
"remove_list" : [
{
"id" : "9"
}
]
},
"message" : "Synchronized Successfully."
}
我想通过提取个人ID来处理remove_list
,这里是我正在使用的快速代码。
Alamofire.request(requestURL, method: .post, parameters: parameters).responseJSON { response in
switch response.result {
case .success(let value):
let response = JSON(value)
print(response)
if "success" == response["status"] {
// Format Promotion Ids To Remove From List
var promotionIdsToRemove:[Int32] = []
for (_,promotionJson):(String, JSON) in response["promotion"]["remove_list"] {
promotionIdsToRemove.append(promotionJson["id"].int32!)
}
}
case .failure(let error):
print(error)
}
}
这让我误以为是fatal error: unexpectedly found nil while unwrapping an Optional value
指向以下代码promotionIdsToRemove.append(promotionJson["id"].int32!)
如果我只打印promotionJson["id"]
它会给我正确的值,但是当我对它进行类型转换时,会抛出这个错误。
这可能是什么问题?
答案 0 :(得分:1)
您需要通过告诉SwiftyJSON这样做来将remove_list
视为数组。你的代码应该是
for removeJSON in response["promotion"]["remove_list"].arrayValue {
// removeJSON is of type JSON here
promotionIdsToRemove.append(removeJSON["id"].intValue)
}
这会循环遍历remove_list数组,并将所有ID附加到promotionIdsToRemove
。如果某个项目没有ID字段,.intValue
将确保您获得正确的值或0
作为ID。
答案 1 :(得分:0)
response["promotion"]["remove_list"]
应该是Array,而不是Dictionary。
将您的代码更改为
for promotionJson in response["promotion"]["remove_list"] {
promotionIdsToRemove.append(promotionJson["id"].int32!)
}
答案 2 :(得分:0)
谢谢@DávidPásztor,以下代码似乎可以解决问题。
(
Nvl2(RollNo, Year , null),
Nvl2(RollNo, ExamCode, null),
RollNo
)