Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 如何将body(ByteBuffer)解码为Vapor 4中的内容?_Json_Swift_Decode_Vapor - Fatal编程技术网

Json 如何将body(ByteBuffer)解码为Vapor 4中的内容?

Json 如何将body(ByteBuffer)解码为Vapor 4中的内容?,json,swift,decode,vapor,Json,Swift,Decode,Vapor,当ResponseReceipt符合此处的内容协议时,我可以很容易地解码Vapor文档中描述的response.content let receipt = try? response.content.decode(ResponseReceipt.self) 但要理解如何使用Vapor的工具来解读身体的反应并不像解读ByteBuffer那么容易。如何以与Vapor类似的本机方式解码response.body?首先,重要的是要了解ByteBuffer是一种字节的集合,因此您可以从中读取字节并尝试像

当ResponseReceipt符合此处的内容协议时,我可以很容易地解码Vapor文档中描述的response.content

let receipt = try? response.content.decode(ResponseReceipt.self)

但要理解如何使用Vapor的工具来解读身体的反应并不像解读ByteBuffer那么容易。如何以与Vapor类似的本机方式解码response.body?

首先,重要的是要了解ByteBuffer是一种字节的集合,因此您可以从中读取字节并尝试像这样初始化
数据

guard let byteBuffer=req.body.data else{throw Abort(.badRequest)}
让数据=数据(缓冲区:byteBuffer)
let receive=try JSONDecoder().decode(ResponseReceipt.self,from:data)
还是像这样

guard let byteBuffer=response.body.data else{throw Abort(.badRequest)}
guard let data=byteBuffer.getData(at:0,长度:byteBuffer.readableBytes)else{throw Abort(.badRequest)}
let receive=try JSONDecoder().decode(ResponseReceipt.self,from:data)
但使用Vapor,您有两种更方便的方法来解码字节缓冲区

选择你更喜欢的一个

guard let byteBuffer=response.body.data else{throw Abort(.badRequest)}
let receive=try JSONDecoder().decode(ResponseReceipt.self,from:byteBuffer)
再来一次

guard let byteBuffer=response.body.data else{throw Abort(.badRequest)}
guard let receive=try byteBuffer.getJSONDecodable(ResponseReceipt.self,at:0,长度:byteBuffer.readableBytes)
还有一个

guard let byteBuffer=response.body.data else{throw Abort(.badRequest)}
guard let receive=try byteBuffer.getJSONDecodable(ResponseReceipt.self,解码器:JSONDecoder(),at:0,长度:byteBuffer.readableBytes)

谢谢。我希望Vapor有自己的机制,可以直接用更好的解码算法解码内容。我的意思是希望它能够将“1”解码为Bool true等,并避免在我的可解码结构中长时间手动解码初始值设定项。无论如何,您得到的是+1,因为我将通过跳过将ByteBuffer转换为Data来缩短代码)