Ios 将数组编码为json时密钥顺序问题
您好,我正在将Ios 将数组编码为json时密钥顺序问题,ios,swift,encoding,jsonencoder,Ios,Swift,Encoding,Jsonencoder,您好,我正在将数组编码为json,这样我就创建了如下的模型类 class QuotationListDataModel: Codable{ var quatation_id: String? var PartNumber: String? var Description: String? var Quantity: String? var AvailableStockQty: String? var Each: String? init(q
数组编码为json
,这样我就创建了如下的模型类
class QuotationListDataModel: Codable{
var quatation_id: String?
var PartNumber: String?
var Description: String?
var Quantity: String?
var AvailableStockQty: String?
var Each: String?
init(quatation_id: String?, PartNumber: String?,Description: String?,Quantity:String?,AvailableStockQty: String?,Each: String?) {
self.quatation_id = quatation_id
self.PartNumber = PartNumber
self.Description = Description
self.Quantity = Quantity
self.AvailableStockQty = AvailableStockQty
self.Each = Each
}
}
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
do {
let jsonData = try encoder.encode(quotationSeelctedData)
if let jsonString = String.init(data: jsonData, encoding: .utf8) {
print(jsonString)
}
} catch {
print("the encoding failed")
}
[
{
"quatation_id": "67",
"Description": "PSH BTN",
"Each": "140.00 Total 40320.00",
"PartNumber": "15",
"Quantity": "288",
"AvailableStockQty": "0"
},
{
"quatation_id": "66",
"Description": "SELF-CLOSING 4-ARM HANDLE (PLATED BRASS)",
"Each": "14.00 Total 3612.00",
"PartNumber": "000015-40",
"Quantity": "258",
"AvailableStockQty": "10"
}
]
Part Number : 000015-40
Description : SELF-CLOSING 4-ARM HANDLE (PLATED BRASS)
Quantity : 10
Available Stock Qty. : 10
Each: 12.1 Total: 121
我正在编码的代码如下所示
class QuotationListDataModel: Codable{
var quatation_id: String?
var PartNumber: String?
var Description: String?
var Quantity: String?
var AvailableStockQty: String?
var Each: String?
init(quatation_id: String?, PartNumber: String?,Description: String?,Quantity:String?,AvailableStockQty: String?,Each: String?) {
self.quatation_id = quatation_id
self.PartNumber = PartNumber
self.Description = Description
self.Quantity = Quantity
self.AvailableStockQty = AvailableStockQty
self.Each = Each
}
}
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
do {
let jsonData = try encoder.encode(quotationSeelctedData)
if let jsonString = String.init(data: jsonData, encoding: .utf8) {
print(jsonString)
}
} catch {
print("the encoding failed")
}
[
{
"quatation_id": "67",
"Description": "PSH BTN",
"Each": "140.00 Total 40320.00",
"PartNumber": "15",
"Quantity": "288",
"AvailableStockQty": "0"
},
{
"quatation_id": "66",
"Description": "SELF-CLOSING 4-ARM HANDLE (PLATED BRASS)",
"Each": "14.00 Total 3612.00",
"PartNumber": "000015-40",
"Quantity": "258",
"AvailableStockQty": "10"
}
]
Part Number : 000015-40
Description : SELF-CLOSING 4-ARM HANDLE (PLATED BRASS)
Quantity : 10
Available Stock Qty. : 10
Each: 12.1 Total: 121
这段代码成功地进行了json编码,但当我打印编码的字符串时,顺序没有得到维护,然后我得到如下输出
class QuotationListDataModel: Codable{
var quatation_id: String?
var PartNumber: String?
var Description: String?
var Quantity: String?
var AvailableStockQty: String?
var Each: String?
init(quatation_id: String?, PartNumber: String?,Description: String?,Quantity:String?,AvailableStockQty: String?,Each: String?) {
self.quatation_id = quatation_id
self.PartNumber = PartNumber
self.Description = Description
self.Quantity = Quantity
self.AvailableStockQty = AvailableStockQty
self.Each = Each
}
}
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
do {
let jsonData = try encoder.encode(quotationSeelctedData)
if let jsonString = String.init(data: jsonData, encoding: .utf8) {
print(jsonString)
}
} catch {
print("the encoding failed")
}
[
{
"quatation_id": "67",
"Description": "PSH BTN",
"Each": "140.00 Total 40320.00",
"PartNumber": "15",
"Quantity": "288",
"AvailableStockQty": "0"
},
{
"quatation_id": "66",
"Description": "SELF-CLOSING 4-ARM HANDLE (PLATED BRASS)",
"Each": "14.00 Total 3612.00",
"PartNumber": "000015-40",
"Quantity": "258",
"AvailableStockQty": "10"
}
]
Part Number : 000015-40
Description : SELF-CLOSING 4-ARM HANDLE (PLATED BRASS)
Quantity : 10
Available Stock Qty. : 10
Each: 12.1 Total: 121
我希望输出如下
class QuotationListDataModel: Codable{
var quatation_id: String?
var PartNumber: String?
var Description: String?
var Quantity: String?
var AvailableStockQty: String?
var Each: String?
init(quatation_id: String?, PartNumber: String?,Description: String?,Quantity:String?,AvailableStockQty: String?,Each: String?) {
self.quatation_id = quatation_id
self.PartNumber = PartNumber
self.Description = Description
self.Quantity = Quantity
self.AvailableStockQty = AvailableStockQty
self.Each = Each
}
}
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
do {
let jsonData = try encoder.encode(quotationSeelctedData)
if let jsonString = String.init(data: jsonData, encoding: .utf8) {
print(jsonString)
}
} catch {
print("the encoding failed")
}
[
{
"quatation_id": "67",
"Description": "PSH BTN",
"Each": "140.00 Total 40320.00",
"PartNumber": "15",
"Quantity": "288",
"AvailableStockQty": "0"
},
{
"quatation_id": "66",
"Description": "SELF-CLOSING 4-ARM HANDLE (PLATED BRASS)",
"Each": "14.00 Total 3612.00",
"PartNumber": "000015-40",
"Quantity": "258",
"AvailableStockQty": "10"
}
]
Part Number : 000015-40
Description : SELF-CLOSING 4-ARM HANDLE (PLATED BRASS)
Quantity : 10
Available Stock Qty. : 10
Each: 12.1 Total: 121
有谁能告诉我如何按照我的模型类保持顺序吗?我猜,根据上面的评论,你实际上不想订购字典的键,你希望打印版本的顺序如下:
Part Number : 000015-40
Description : SELF-CLOSING 4-ARM HANDLE (PLATED BRASS)
Quantity : 10
Available Stock Qty. : 10
Each: 12.1 Total: 121
所以,我想正确的答案是打印如下:
Part Number : 000015-40
Description : SELF-CLOSING 4-ARM HANDLE (PLATED BRASS)
Quantity : 10
Available Stock Qty. : 10
Each: 12.1 Total: 121
首先,创建包装器
struct FailableDecodable:Decodable{
让基地:基地?
init(来自解码器:解码器)抛出{
let container=尝试解码器。singleValueContainer()
self.base=try?container.decode(base.self)
}
}
let items=try JSONDecoder()
.decode([FailableDecodable].self,from:json)
.compactMap{$0.base}/.Swift 4.0中的.flatMap
}
}抓住{
打印(“编码失败”)
}
打印(项目)
如果你想按你的意愿打印它们
用于项目中的项目{
print(“Part Number:\(item.PartNumber!)”//试试这个,encoder.outputFormatting=.sortedKeys,看看发生了什么我已经试过了,但仍然顺序错误字典没有顺序。你不应该关心顺序,它是一个键访问,而不是索引访问。所以如果是因为“Part Number”不是“第一个”表面上看,这是正常的行为。那么还有其他解决方案吗?我能知道你为什么要订购吗?我想你能得到的唯一订单是alpha.订单。