数据字段在Swift 3中无法正确显示JSON中的数据

时间:2017-05-18 10:36:19

标签: arrays iphone json swift swift3

我正在为iPhone开发一个应用程序。我已成功将数据输入应用程序。我遇到的问题是,JSON中的某些数据结构与其他数据结构略有不同,因此它不会进入或不允许我的数据显示。到目前为止我的代码是:

已更新

导致问题的JSON结构

categories: [
   {
name: "Here and now"
   }
],

视图控制器中的Swift代码

guard let dic2 = post["categories"] as? [[String: Any]] else {
                    return
          }
                for category in dic2 {
                guard let content = category["name"] as? String else {
                return
               }
          }

然后以下代码将附加后期输入

postsinput.append(postinput.init(mainImage: mainImage, name: title, author: author, summary: summary, content: content, categories: content))

然后以下是将输出放到标签

let catLabel = cell?.viewWithTag(4) as! UILabel
catLabel.text = (postsinput[indexPath.row].categories).replacingOccurrences(of: "<[^>]+>", with: "", options: .regularExpression, range: nil)

所以这毕竟不起作用,viewcontroller中的输出是空的,我确信这是我的代码没有正确地从JSON读取数据结构。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

Categories是一个字典数组,因此您应该在该结构中对其进行解析。

var categories = [String]()
guard let dic2 = post["categories"] as? [[String: Any]] else {
    return
}
for category in dic2 {
    guard let content = category["name"] as? String else {
        return
    }
    categories.append(content)
}

答案 1 :(得分:0)

假设你的JSON就像

一样
{
    "categories": [{
        "name": "Here and now"
    }]
}

categories不是字典,它实际上是一个字典对象数组。所以这一行会失败:

guard let dic2 = post["categories"] as? [String: Any]

应该是

guard let dic2 = post["categories"] as? [[String: Any]]