Ios 如果对象的键不同,如何编写模型结构

Ios 如果对象的键不同,如何编写模型结构,ios,json,swift,model-view-controller,struct,Ios,Json,Swift,Model View Controller,Struct,我试图解码这些数据,但密钥不同,所以我不确定如何设置一个变量来捕获未知密钥 这就是我想要达到的目标 struct Offer: Decodable { let creationDate: Double let description: String let imageUrl: String let phoneNumber: String } 这就是JSON { "-Ll3YgwlwuV0AbZSwhAK": { "creationDate": 156

我试图解码这些数据,但密钥不同,所以我不确定如何设置一个变量来捕获未知密钥

这就是我想要达到的目标

struct Offer: Decodable {
    let creationDate: Double
    let description: String
    let imageUrl: String
    let phoneNumber: String
}
这就是JSON

{
  "-Ll3YgwlwuV0AbZSwhAK": {
    "creationDate": 1564518305.580168,
    "description": "Hehbs",
    "imageUrl": "https://firebasestorage.googleapis.com/",
    "phoneNumber": "458194954"
  },
  "-Ll3ZWpOxPvep66qzEK6": {
    "creationDate": 1564518522.191582,
    "description": "Jenner",
    "imageUrl": "https://firebasestorage.googleapis.com/",
    "phoneNumber": "51554"
  },
  "-Ll3jq39mEjHS0AsycEz": {
    "creationDate": 1564521488.6788402,
    "description": "Jwd\t\t",
    "imageUrl": "https://firebasestorage.googleapis.com/",
    "phoneNumber": "dwjd"
  },
  "-Ll3l2u_zqi1JLrJ_049": {
    "creationDate": 1564521807.552466,
    "description": "like",
    "imageUrl": "https://firebasestorage.googleapis.com/",
    "phoneNumber": "kkef"
  },
  "-Ll3lSVfdKGGtMMuTcDg": {
    "creationDate": 1564521912.391248,
    "description": "Mmm",
    "imageUrl": "https://firebasestorage.googleapis.com/",
    "phoneNumber": "mm"
  }
}

您还可以使用以下方法对其进行解码:

let dictionary = try JSONDecoder().decode([String: Offer].self, from: data)
do {
    let decoder = JSONDecoder()
    decoder.dateDecodingStrategy = .secondsSince1970
    let dictionary = try decoder.decode([String: Offer].self, from: data)
    print(dictionary)
} catch {
    print(error)
}

不管它值多少钱,我倾向于把
creationDate
a
Date
imageUrl
a
URL

struct Offer: Decodable {
    let creationDate: Date
    let description: String
    let imageUrl: URL
    let phoneNumber: String
}
然后,您可以使用以下方法对其进行解码:

let dictionary = try JSONDecoder().decode([String: Offer].self, from: data)
do {
    let decoder = JSONDecoder()
    decoder.dateDecodingStrategy = .secondsSince1970
    let dictionary = try decoder.decode([String: Offer].self, from: data)
    print(dictionary)
} catch {
    print(error)
}

您还可以使用以下方法对其进行解码:

let dictionary = try JSONDecoder().decode([String: Offer].self, from: data)
do {
    let decoder = JSONDecoder()
    decoder.dateDecodingStrategy = .secondsSince1970
    let dictionary = try decoder.decode([String: Offer].self, from: data)
    print(dictionary)
} catch {
    print(error)
}

不管它值多少钱,我倾向于把
creationDate
a
Date
imageUrl
a
URL

struct Offer: Decodable {
    let creationDate: Date
    let description: String
    let imageUrl: URL
    let phoneNumber: String
}
然后,您可以使用以下方法对其进行解码:

let dictionary = try JSONDecoder().decode([String: Offer].self, from: data)
do {
    let decoder = JSONDecoder()
    decoder.dateDecodingStrategy = .secondsSince1970
    let dictionary = try decoder.decode([String: Offer].self, from: data)
    print(dictionary)
} catch {
    print(error)
}

JSON字典的键成为Swift
[OfferID:Offer]
字典的键可能与Swift
[OfferID:Offer]
字典的键重复,或可能与Swift
[OfferID:Offer]
字典的键重复