将JSON解析为Struct Swift 4

爱德华·S。

我正在尝试将JSON解析为结构。既然那是我看到人们这样做的方式?数据是我刚从URLRequest获得的数据对象。

这是JSON的示例:

{
  "policies": [{
    "id": 100,
    "name": "00 Kickoff"
  }, {
    "id": 237,
    "name": "02 Install Program 01"
  }, {
    "id": 13,
    "name": "03 AV Install"
  }, {
    "id": 114,
    "name": "04 - Tag Device"
  }, {
    "id": 102,
    "name": "05 VPN Install"
  }]
}

还有很多其他项目,但这是JSON的确切结构。

因此,我写了一些Structs认为可以保存数据:

struct Policies: Codable {
    let policies: [Policy]

    private enum CodingKeys: String, CodingKey {
        case policies = "policies"
    }
}

struct Policy: Codable {
    let id: String?
    let name: String?

    private enum CodingKeys: String, CodingKey {
        case id = "id"
        case name = "name"
    }
}

然后,我尝试进行解码:

do {
    let jssPolicies: Policies = try decoder.decode(Policies.self, from: data)
} catch let error as NSError {
    debugPrint("Error: \(error.description)")
    }

但是然后我得到了错误:

"Error: Error Domain=NSCocoaErrorDomain Code=4864 \"Expected to decode Array<Any> but found a dictionary instead.\" UserInfo={NSCodingPath=(\n), NSDebugDescription=Expected to decode Array<Any> but found a dictionary instead.}"

我觉得我接近了吗?但是谁知道我可能不是。有人可以提供如何从URL请求中获取此Data对象并将其转换为JSON的任何帮助都将有所帮助。我看了几篇文章,但是由于JSON的结构不同,所以我有点卡住了。

在此先感谢,Ed

瓦迪安

实际上,使用给定的JSON,您应该得到

类型“字符串”不匹配:预期会解码,String但找到了一个数字。

因为key的值idInt这是真正的JSON吗?

如果尝试解码,则会得到描述的错误 [Policies].self

您可以省略所有CodingKeys,如果它们与属性名称匹配,则可以免费获得它们

struct Policies: Codable {
    let policies: [Policy]
}

struct Policy: Codable {
    let id: Int
    let name: String
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 javaer101[email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章