可通过嘈杂的JSON响应进行编码

可通过嘈杂的JSON响应进行编码,json,swift,codable,Json,Swift,Codable,一般来说,我了解Codable的工作原理。一个简单的例子是: [ { “id”:1, “姓名”:“保罗”, “照片”:{ “id”:48, “url”:”https://..." } }, { “id”:2, “姓名”:“安德鲁”, “照片”:{ “id”:389, “url”:”https://..." } } ] 这需要两个简单的结构: struct用户:可编码{ 变量id:Int 变量名称:String 照片:照片 } 结构照片:可编码{ 变量id:Int var url:String

一般来说,我了解
Codable
的工作原理。一个简单的例子是:

[
{
“id”:1,
“姓名”:“保罗”,
“照片”:{
“id”:48,
“url”:”https://..."
}
},
{
“id”:2,
“姓名”:“安德鲁”,
“照片”:{
“id”:389,
“url”:”https://..."
}
}
]
这需要两个简单的结构:

struct用户:可编码{
变量id:Int
变量名称:String
照片:照片
}
结构照片:可编码{
变量id:Int
var url:String
}

鉴于上述示例,我的API的响应json采用了更复杂的格式:

{
“数据”:[
{
“数据”:{
“id”:1,
“属性”:{
“姓名”:“保罗”
},
“关系”:{
“照片”:{
“数据”:{
“id”:48,
“属性”:{
“url”:”https://..."
}
}
}
}
}
},
{
“数据”:{
“id”:2,
“属性”:{
“姓名”:“安德鲁”
},
“关系”:{
“照片”:{
“数据”:{
“id”:389,
“属性”:{
“url”:”https://..."
}
}
}
}
}
}
]
}
我已经尝试过通过移除所有杂音并尝试使用第一个json示例中的格式来预解析/展平json。然而,我觉得可能有一种更好、更明显的方法可以做到这一点,而且操作json似乎非常容易出错

我已经读过关于编码键的内容,但在这一点上,这几乎和使用SwiftyJSON手动解析json一样多的额外工作

有人知道如何有效地执行此操作吗?

使用从指定的JSON为您生成响应模型

import Foundation

// MARK: - Root
struct Root: Codable {
    let data: [Datum]
}

// MARK: - Datum
struct Datum: Codable {
    let data: DatumData
}

// MARK: - DatumData
struct DatumData: Codable {
    let id: Int
    let attributes: PurpleAttributes
    let relationships: Relationships
}

// MARK: - PurpleAttributes
struct PurpleAttributes: Codable {
    let name: String
}

// MARK: - Relationships
struct Relationships: Codable {
    let photo: Photo
}

// MARK: - Photo
struct Photo: Codable {
    let data: PhotoData
}

// MARK: - PhotoData
struct PhotoData: Codable {
    let id: Int
    let attributes: FluffyAttributes
}

// MARK: - FluffyAttributes
struct FluffyAttributes: Codable {
    let url: String
}

let root = try JSONDecoder().decode(Root.self, from: jsonData)

为什么要发布与问题无关的json和代码?json到底有什么问题?您当然不需要为此编写和编码密钥枚举。我只是想给出上下文,仅此而已。我对编码键不是很熟悉。问题是它太复杂了,我不知道如何解析它。但是请关注@JoakimDanielson的评论。谢谢分享@RB的评论!谢谢你的帮助@JoakimDanielson抓得好,更新