gpt4 book ai didi

arrays - Swift Vapor 对对象数组的错误解码

转载 作者:行者123 更新时间:2023-11-30 10:32:12 25 4
gpt4 key购买 nike

我正在尝试在另一个对象中传递对象数组

struct CreationData: Encodable {
enum CodingKeys: String, CodingKey {
case property1
case amount
case participants
case code
}

var property1: String?
var amount: Double?
var tipAmount: Double?
var participants: [Participant]
var currency: Currency

init() {
name = nil
property1 = nil
participants = []
tipAmount = nil
currency = .hryvna
}

func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
if let name = name {
try container.encode(name, forKey: .name)
}
if let property1 = property1 {
try container.encode(property1, forKey: .property1)
}
if let tipAmount = tipAmount {
try container.encode(tipAmount, forKey: .tipAmount)
}
if !participants.isEmpty {
try container.encode(participants, forKey: .participants)
}
try container.encode(currency, forKey: .currencyCode)
}
}

数组中对象的位置

struct Participant: Hashable, Encodable {
enum CodingKeys: String, CodingKey {
case amount
case id
}

var image: Data?
var displayName: String
var amount: Double? = 100
var id: Int?

var name: String?

var isSelected: Bool = false

func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(amount, forKey: .amount)
try container.encode(id, forKey: .id)
}

}

所以我的 JSON 看起来像这样

{
"property1" : 123,
"code" : "zen",
"name" : "No name",
"participants" : [
{
"amount" : 100,
"id" : 1
}
]
}

在后端我使用这个处理程序

func createHandler(_ req: Request, splitCreate: Create) throws -> Future<SplitResponse> {
let logger = try req.make(Logger.self)
let user = try req.requireAuthenticated(User.self)
guard let id = user.id else {
throw Abort(.badRequest, reason: "Couldn't get an id for current user")
}

...

使用此请求内容对象

struct Create: Content {
struct Participant: Content {
var id: Int?
var amount: Double?
}

var amount: Double?
var tipAmount: Double?
var name: String?
var participants: [Participant]
var currencyCode: String
}

我通过参与者数组创建枢轴,问题是不是像这样从数组中获取单个参与者

[App.Create.Participant(id: Optional(1), amount: Optional(100.0))]

在后端,我从指定的 JSON 获取这些参与者

[App.Create.Participant(id: Optional(1), amount: nil), App.Create.Participant(id: Optional(1), amount: Optional(100.0))]

似乎我的数组 json 解码不正确,但我无法找到修复它的方法

最佳答案

由于某种原因,将 Content-Type header 添加到 URLSessionConfiguration.additionalHeaders 并没有将编码更改为 JSON。所以我必须明确地将 Alamofire 的请求编码设置为 JSONEncoding.default

关于arrays - Swift Vapor 对对象数组的错误解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58920230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com