gpt4 book ai didi

ios - 如何使用 JSONEncoder 对嵌套数组进行编码

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

我尝试使用 JSONEncoder 将四个不同的数组编码为 json 格式,但无法转换数组。所以,请帮帮我。我在 iOS 11 上使用 swift 4、xcode 9。

我的数组是:

var timeCart //dynamic data as string
var nameCart //dynamic data as string, ex. ["myNameOne", "myNameTwo", ...]
var quantityCart //dynamic data as Int, ex. [2, 3, 5, ...]
var priceCart //dynamic data as Int, ex. [82, 73, 65, ...]

我的结构是:

struct OrderDetailJSON: Encodable {
let allOrder: [AllOrder]
let TaxDetials: TaxDetail

struct AllOrder: Encodable {
let date_time: String
let item: String
let name: String
let price: String
}

struct TaxDetail: Encodable {
let tax_per: String
let tax_name: String
}
}

我试图在 TableView 内像这样编码

let orderDetailsJSON = OrderDetailJSON(allOrder: [.init(date_time: "\(quantityCart[indexPath.row])", item: "\(quantityCart[indexPath.row])", name: "\(nameCart[indexPath.row])", price: "\(priceCart[indexPath.row])")], TaxDetials: .init(tax_per: defaults.string(forKey: "STORE_TAX")!, tax_name: defaults.string(forKey: "STORE_TAX_NAME")!))
do {
let jsonData = try JSONEncoder().encode(orderDetailsJSON)
let jsonString = String(data: jsonData, encoding: .utf8)
print("order_details :" + jsonString!)
}catch{

}

我得到的输出是:

order_details: {
"TaxDetials": {
"tax_per": "5",
"tax_name": "CGST & SGST"
},
"allOrder": [
{
"date_time": "2",
"name": "Manchurian",
"item": "2",
"price": "87"
}
]
}order_details: {
"TaxDetials": {
"tax_per": "5",
"tax_name": "CGST & SGST"
},
"allOrder": [
{
"date_time": "3",
"name": "Paneer Tikka",
"item": "3",
"price": "150"
}
]
}order_details: {
"TaxDetials": {
"tax_per": "5",
"tax_name": "CGST & SGST"
},
"allOrder": [
{
"date_time": "2",
"name": "snacks",
"item": "2",
"price": "54"
}
]
}

我期望的输出是:

order_details: {
"TaxDetials": {
"tax_per": "5",
"tax_name": "CGST & SGST"
},
"allOrder": [
{
"date_time": "2",
"name": "Manchurian",
"item": "2",
"price": "87"
},
{
"date_time": "3",
"name": "Paneer Tikka",
"item": "3",
"price": "150"
},
{
"date_time": "2",
"name": "snacks",
"item": "2",
"price": "54"
}
]
}

最佳答案

您的结构声明没有任何问题(除了您应该遵守 Swift 命名约定,即变量名称采用小驼峰命名法 - taxPer 而不是 tax_per等,并且您的属性名称未使用正确的复数/单数形式)。

问题是您正在为每个 TableView 单元格定义一个 OrderDetailJSON 实例,而您的 TaxDetails 似乎对于表中的所有单元格都应该相同,并且您实际上想要创建一个 OrderDetailJSON 实例,其 allOrder 数组属性为每个 TableView 单元格包含一个 AllOrder 实例。您需要将 allOrder 属性更改为可变才能使其正常工作。

class YourTableViewController: UITableViewController {
var orderDetails: OrderDetailJSON
...
// You might need to use a different tableView function depending on your exact needs
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
orderDetails.allOrder[indexPath.row] = AllOrder(date_time: "\(quantityCart[indexPath.row])", item: "\(quantityCart[indexPath.row])", name: "\(nameCart[indexPath.row])", price: "\(priceCart[indexPath.row])")
}
}

您需要确保使用正确的 TaxDetails 初始化 orderDetails,并且向 allOrder 预分配相同数量的元素您将拥有的表格 View 单元格。您只需在所有单元格都填满信息后将 orderDetails 转换为 JSON,无需逐个单元格执行此操作。

关于ios - 如何使用 JSONEncoder 对嵌套数组进行编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50528053/

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