2017-07-24 98 views
0

我从API调用接收到以下JSON。SwiftyJSON - 无法解析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"]它给了我正确的值,但是当我类型转换它,抛出我这个错误。

这里有什么问题?

+0

您是否尝试打印promotionJson [“id”]? –

+0

是的!并打印值9,问题是在进行类型转换时。 –

+0

但它是一个字符串,你确定swifty可以改变任何你想强制解开的int32吗? –

回答

0

谢谢@DávidPásztor,下面的代码似乎有伎俩。

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

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

更改您的代码

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

这不起作用。它给了我错误'“类型JSON._Element(aka(String,JSON))没有下标成员。”' –

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

+0

让我试试这个。 –

+0

这仍然给我错误。我发布的解决方案似乎是唯一正在工作的解决方案。这很奇怪。 –

+0

这非常奇怪......我已经和SwiftyJSON合作过很多次,但从来没有见过类似你所遇到的事情。你确定你复制了我的整个循环吗? – donnywals