Ios 解码器在解析后洗牌JSON密钥(包含动态密钥)序列

Ios 解码器在解析后洗牌JSON密钥(包含动态密钥)序列,ios,json,swift,decodable,jsondecoder,Ios,Json,Swift,Decodable,Jsondecoder,我有类似前面提到的动态JSON键 使用decodable,我必须从json生成对象 struct ChannelSequence : Codable { public var innerArray: [String: InnerChannelNode] private struct CustomCodingKeys: CodingKey { var stringValue: String init?(stringVa

我有类似前面提到的动态JSON键 使用decodable,我必须从json生成对象

struct ChannelSequence : Codable {
    public var innerArray: [String: InnerChannelNode]  
    
    private struct CustomCodingKeys: CodingKey {
        
        var stringValue: String
        init?(stringValue: String) {
            self.stringValue = stringValue
        }
        
        var intValue: Int?
        init?(intValue: Int) {
            return nil
        }
    }
    
    init(from decoder: Decoder) throws {
        let values = try decoder.container(keyedBy: CustomCodingKeys.self) 
        self.innerArray = [String: InnerChannelNode]()
        for key in values.allKeys {
            let value = try values.decode(InnerChannelNode.self, forKey: CustomCodingKeys(stringValue: key.stringValue)!)
            self.innerArray[key.stringValue] = value //<--------- here I lost the order 
        }
    }
    
}
struct ChannelSequence:Codable{
公共变量innerArray:[字符串:InnerChannelNode]
私有结构CustomCodingKey:CodingKey{
var stringValue:String
初始化?(stringValue:String){
self.stringValue=stringValue
}
var intValue:Int?
初始化?(intValue:Int){
归零
}
}
init(来自解码器:解码器)抛出{
let values=try decoder.container(keyedBy:CustomCodingKeys.self)
self.innerArray=[字符串:InnerChannelNode]()
用于输入值。所有键{
让value=尝试values.decode(InnerChannelNode.self,forKey:CustomCodingKeys(stringValue:key.stringValue)!)

self.innerArray[key.stringValue]=value//JSON键没有定义的顺序。它们就像字典一样。
{“a”:1,“b”:2}
{“b”:2,“a”:1}
都是相同的JSON。既然你要把它们放在字典里,你为什么要在意呢?字典没有顺序。
allKeys
以未定义的顺序返回值,它可能会在下一次调用中更改。此外,你不需要所有这些自定义解码逻辑。所有这些都可以由编译器合成。