SwiftyJSON - 无法解析 Json
Posted
技术标签:
【中文标题】SwiftyJSON - 无法解析 Json【英文标题】:SwiftyJSON - Unable to Parse Json 【发布时间】:2017-07-24 12:33:07 【问题描述】:我从 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"]
,它会给我正确的值,但是当我对它进行类型转换时,会抛出这个错误。
这可能是什么问题?
【问题讨论】:
您是否尝试打印promotionJson["id"]? 是的!它打印值 9,问题出在类型转换时。 但它是一个字符串,你确定 swifty 可以将任何你强制解包的东西更改为 int32 吗? 如果promotionJson["id"]
被解析为字符串,你应该尝试使用Int(promotionJson["id"])
。
@DávidPásztor 谢谢。它似乎可以解决问题。
【参考方案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
将确保您获得正确的值或为 id 获得0
。
【讨论】:
让我试试这个。 这仍然给了我错误。我发布的解决方案似乎是唯一有效的解决方案。不过这很奇怪。 这很奇怪......我已经使用 SwiftyJSON 工作了很多次,但从未见过像您所经历的那样。你确定你复制了我的整个循环吗? 确实很奇怪,我也一直在用SwiftyJSON,第一次遇到这个问题。【参考方案2】:response["promotion"]["remove_list"]
应该是数组,而不是字典。
将您的代码更改为
for promotionJson in response["promotion"]["remove_list"]
promotionIdsToRemove.append(promotionJson["id"].int32!)
【讨论】:
这不起作用。它给了我错误"Type JSON._Element (aka (String, JSON)) has no subscript members."
【参考方案3】:
谢谢@DávidPásztor,下面的代码似乎可以解决问题。
var promotionIdsToRemove:[Int32] = []
for (_,promotionJson):(String, JSON) in response["promotion"]["remove_list"]
promotionIdsToRemove.append(Int32(promotionJson["id"].string!)!)
【讨论】:
以上是关于SwiftyJSON - 无法解析 Json的主要内容,如果未能解决你的问题,请参考以下文章
无法解析数据 JSON alamofire SwiftyJSON