在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”不一致。@devnullIndex
已经是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”不一致。@devnullIndex
已经是Index
类型,因此不需要创建另一个对象allDocs
,直接使用Index
。@JoakimDanielson谢谢我这么做了,现在我已经让Index=tr了y JSONDecoder().decode(Index.self,from:data)返回try req.view().render(“Index”,Index)但仍然获取参数类型“Index”不符合预期类型“Encodable”@devnull将索引和行改为符合Codable