SwiftyJSON - 无法解析 Json

SwiftyJSON - Unable to Parse Json

我从 API 电话中收到以下 JSON。

{
  "status" : "success",
  "promotion" : {
    "insert_list" : [

    ],
    "remove_list" : [
      {
        "id" : "9"
      }
    ]
  },
  "message" : "Synchronized Successfully."
}

我想通过提取个人ID来处理remove_list,这是swift代码,我正在使用。

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"] 它会给我正确的值,但是当我对它进行类型转换时,会抛出这个错误。

这可能是什么问题?

response["promotion"]["remove_list"] 应该是数组,而不是字典。

将您的代码更改为

        for promotionJson in response["promotion"]["remove_list"] {
            promotionIdsToRemove.append(promotionJson["id"].int32!)
        }   

您需要通过告诉 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。

谢谢@DávidPásztor,下面的代码似乎可以解决问题。

var promotionIdsToRemove:[Int32] = []
for (_,promotionJson):(String, JSON) in response["promotion"]["remove_list"] {
    promotionIdsToRemove.append(Int32(promotionJson["id"].string!)!)
}