【问题标题】:Data field not displaying data from JSON correctly in Swift 3数据字段未在 Swift 3 中正确显示来自 JSON 的数据
【发布时间】:2017-05-18 10:36:19
【问题描述】:

我正在为 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
               }
          }

那么下面的代码就是追加postinput

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)

所以毕竟它不起作用,视图控制器中的输出是空的,我确信这与我的代码没有正确读取 JSON 中的数据结构有关。

有什么想法吗?

【问题讨论】:

  • 请阅读 JSON(不是反序列化后的字典表示!)。这很简单:{} 是一个字典,[] 是一个数组。所有密钥都必须是String。双引号中的所有值都是String,带小数位的数值是Double,没有的是Inttrue/false(不是双引号)是BoolnullNSNull .这就是 JSON 的整个类型集。
  • PS:如果您想获得 real 解决方案,请发布 real JSON(字符串 - 至少是 real键和 real 值类型)而不是不相关的伪代码,并发布数据源的填充方式。例如 real JSON 似乎包含 HTML 标签。

标签: arrays iphone json swift swift3


【解决方案1】:

假设你的 JSON 像

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

categories 不是字典,它实际上是字典对象的数组。所以这条线会失败:

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

应该是

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

【讨论】:

    【解决方案2】:

    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)
    }
    

    【讨论】:

    • 我将其添加到 postinput.append 中,如果我输入类别:内容。它带来的是内容而不是类别。是否会混淆两个内容被传递到内容和类别?
    • 为什么要在内容和类别下存储相同的信息?您还需要创建一个数组,在其中存储类别名称并使用该数组来初始化您的 postinput 对象。请参阅我的更新答案。
    • 我不想在内容中存储类别,但这就是您回答问题的方式,除非我感到困惑
    • 即使在您的原始代码中,您也基本上在两者中存储了相同的信息。也就是说,您将单个类别的名称存储在内容下,并将包含所有类别的原始 JSON 数据存储在类别下。您应该澄清您实际想要在内容下存储的内容,因为从您在答案中显示的代码来看,它似乎是一个冗余属性。
    • 是的,那是我的错,内容应该只针对内容,类别只针对类别。为混乱道歉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 2020-05-27
    • 2016-07-23
    • 2020-10-20
    • 1970-01-01
    • 2015-03-03
    相关资源
    最近更新 更多