我正在尝试将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的结构不同,所以我有点受阻。
预先感谢, 埃德
答案 0 :(得分:0)
实际上,使用给定的JSON,您应该得到
类型'String'不匹配:预期会解码
String
,但找到一个数字。
因为键id
的值是Int
。这是真正的JSON吗?
如果您尝试解码[Policies].self
如果属性名称与您匹配,您可以省略所有CodingKeys,您可以免费获得它们
struct Policies: Codable {
let policies: [Policy]
}
struct Policy: Codable {
let id: Int
let name: String
}