Swift:如何解析和解码包含字典数组的JSON

时间:2019-04-09 17:32:46

标签: json swift

我正在尝试使用Swift中的Codable协议在某个API端点解析JSON。 您如何正确解码?

到目前为止,我已经创建了一个Model结构来表示位于端点的Post对象。我还使用JSONDecoder()对Post对象数组进行解码。我已经尝试过将模型重构为具有嵌套结构,但这不起作用。

这是JSON的示例:

[
  {
    "ID": 1,
    "title": "Title 1",
    "content": "Content 1"
    ...
  },
  {
    "ID": 2,
    "title": "Title 2",
    "content": "Content 2"
    ...
  }
]

这是模型:

struct Post: Codable {
    let id: Int
    let title, content: String

    enum CodingKeys: String, CodingKey {
        case id = "ID"
        case title, content
    }
}

以下是获取代码的示例:

let task = URLSession.shared.dataTask(with: url) {
            data, _, error in

            if let error = error {
                print("Error: Failed to fetch data from url. [\(error.localizedDescription)]")
                completion(.failure(error))
                return
            }

            guard let data = data else {
                print("Data not available.")
                return
            }

            do {
                let decoder = JSONDecoder()
                let posts = try decoder.decode([Post].self, from: data)
                print("POSTS: : ", posts)
                // ^ THIS IS NOT WORKING. I've tried Post.self too.

            } catch let jsonError {
                //error
            }
        }

        task.resume()

这是我遇到的错误: ERROR: keyNotFound(CodingKeys(stringValue: "ID", intValue: nil), Swift.DecodingError.Context(codingPath: [_JSONKey(stringValue: "Index 0", intValue: 0)], debugDescription: "No value associated with key CodingKeys(stringValue: \"ID\", intValue: nil) (\"ID\").", underlyingError: nil))

1 个答案:

答案 0 :(得分:0)

您的代码就可以了。您只需要检查json数据即可。在以下情况下显示此错误:

  • Coding keys中的某些键与json数据的键不匹配时。在您的情况下,显然= "ID"
      

    要解决postMan中的此检查响应,并使键Codingkeys中的键完全相同