在swift中解码对象数组

在swift中解码对象数组,swift,swift5,Swift,Swift5,我有一个对象数组 {"total_rows":5,"offset":0,"rows":[ {"id":"index","key":"index","value":{"rev":"4-8655b9538706fc55e1c52c913908f338"}}, {"id":"newpage","key":"newpage","value":{"rev":"1-7a27fd343ff98672236996b3fe3abe4f"}}, {"id":"privacy","key":"privacy","va

我有一个对象数组

{"total_rows":5,"offset":0,"rows":[
{"id":"index","key":"index","value":{"rev":"4-8655b9538706fc55e1c52c913908f338"}},
{"id":"newpage","key":"newpage","value":{"rev":"1-7a27fd343ff98672236996b3fe3abe4f"}},
{"id":"privacy","key":"privacy","value":{"rev":"2-534b0021f8ba81d09ad01fc32938ce15"}},
{"id":"secondpage","key":"secondpage","value":{"rev":"2-65847da61d220f8fc128a1a2f1e21e89"}},
{"id":"third page","key":"third page","value":{"rev":"1-d3be434b0d3157d7023fca072e596fd3"}}
]}
我需要太适合结构,然后在swift中解码。我目前的代码是:

struct Index: Content {

    var total_rows: Int
    var offset: Int
   // var rows: [String: String] // I don't really know what I am doing here 

}
和路由器(使用蒸汽)

router.get(“/all”){req->Future in
let docId=“\u所有\u文档”
打印(文档ID)
让couchResponse=couchDBClient.get(dbName:“pages”,uri:docId,worker:req)
警卫负责!=没有其他人{
抛出中止(.notFound)
}
打印(“一”)
返回couchResponse!.flatMap{(响应)->EventLoopFuture in
guard let data=response.body.data else{throw Abort(.notFound)}
打印(数据)
let decoder=JSONDecoder()
让doc=try decoder.decode(Index.self,from:data)
让allDocs=索引(
总计行:doc.total\u行,
抵销:单据抵销
//行:doc.rows
)
打印(“所有文档后测试”)
返回try req.view().render(“index”,allDocs)
}
}

总结第一级的所有内容(总行数和偏移量为int,并正确解码),但如何在结构中包含行:数组并为其分配解析值?

您走的路是对的,只需继续

struct Index: Decodable {
    var total_rows: Int
    var offset: Int
    var rows: [Row]
}
然后定义一行:

struct Row: Decodable {
    var id: String
    var key: String
    var value: Value
}
在这种情况下,不清楚值是什么,只是为了保持结构

struct Value: Decodable {
    var rev: String
}
就这些

let index = try JSONDecoder().decode(Index.self, from: jsonData)

你走的路是对的,你只需要继续走下去

struct Index: Decodable {
    var total_rows: Int
    var offset: Int
    var rows: [Row]
}
然后定义一行:

struct Row: Decodable {
    var id: String
    var key: String
    var value: Value
}
在这种情况下,不清楚值是什么,只是为了保持结构

struct Value: Decodable {
    var rev: String
}
就这些

let index = try JSONDecoder().decode(Index.self, from: jsonData)

如果您的
索引
符合
可编码的
(或
可解码的
),根据您对被
JSONDecoder
解码的期望,那么您的
将是一组同样可解码的
结构,对于它们的
将是另一个可解码的,等等。我希望这是有意义的…@Alladinian你能在答案中分享一个例子吗?对swift来说非常陌生,因此我非常感谢您的帮助如果您的
索引符合
可编码
(或
可解码
),根据您对
JSONDecoder
解码的期望,那么您的
将是一组同样可解码的
结构,对于它们的
将是另一个可解码的,等等。我希望这是有意义的…@Alladinian你能在答案中分享一个例子吗?对斯威夫特来说非常陌生,所以我感谢你的帮助!你有一个问题:你会怎么做。填充这3个结构?目前我已经让allDocs=Index(总计行数:doc.total行数,偏移量:doc.offset,行数:doc.rows//这显然是错误的)感谢让doc=try decoder.decode(Index.self,from:data)让allDocs=Index(总计行:doc.total行,偏移量:doc.offset,行:doc.rows)打印(“在所有文档之后进行测试”)返回try req.view().render(“索引”,所有文档)}.但是我得到的参数类型“Index”与上面答案中的预期类型“Encodable”不一致。@devnull
Index
已经是
Index
类型,因此不需要创建另一个对象
allDocs
,直接使用
Index
。@JoakimDanielson谢谢我这么做了,现在我已经让Index=tr了y JSONDecoder().decode(Index.self,from:data)返回try req.view().render(“Index”,Index)但是仍然获取参数类型“Index”不符合预期类型“Encodable”@devnull将Index和Row更改为符合Codable insteadawesome!一个问题是:如何填充这3个结构?目前我已经让allDocs=Index(合计行数:doc.total行数,偏移量:doc.offset,行数:doc.rows//这显然是错误的)感谢让doc=尝试解码器。解码(Index.self,from:data)让allDocs=索引(总计行:doc.total行,偏移量:doc.offset,行:doc.rows)打印(“在所有文档之后进行测试”)返回try req.view().render(“索引”,所有文档)}.但是我得到的参数类型“Index”与上面答案中的预期类型“Encodable”不一致。@devnull
Index
已经是
Index
类型,因此不需要创建另一个对象
allDocs
,直接使用
Index
。@JoakimDanielson谢谢我这么做了,现在我已经让Index=tr了y JSONDecoder().decode(Index.self,from:data)返回try req.view().render(“Index”,Index)但仍然获取参数类型“Index”不符合预期类型“Encodable”@devnull将索引和行改为符合Codable