我必须解析具有不同键的json字典。 在此示例中,所有对象中只有object_summary键相同,而其他键则不同。 我想使用带有JSONDecoder()的Swift 4 Decodable协议来解析它。请帮忙。
{
"car": {
"object_summary": {
"type": "consumer product",
"name": "ford",
"color": "red",
"description": "A car is a wheeled motor vehicle used for transportation."
"doors": "2",
"price": "$30000",
"milage": "100 miles"
},
"computer": {
"object_summary": {
"type": "hardware",
"name": "mac",
"color": "silver",
"description": "A computer is a device that can be instructed to carry out sequences of arithmetic or s for looms."
},
"purchase_date": "March 4, 2018",
"image": {
"url": "https://seniorsnoworlando.org/wp-content/uploads/2014/05/IMG_0009-1038x576.jpg",
"width": "50px",
"height": "50px"
}
},
"cat": {
"object_summary": {
"type": "animal",
"name": "Max",
"color": "orange",
"description": "The domestic cat carnivorous mammal."
},
"age": "2 years",
"favorite_toy": "ball",
"image": {
"url": "https://www.petful.com/wp-content/uploads/2016/06/american-shorthair-cat-750x434.jpg",
"width": "50px",
"height": "50px"
}
},
"dog": {
"object_summary": {
"type": "animal",
"name": "Jimmy",
"color": "black",
"description": "The domestic dog."
"age": "3 years",
"favorite_toy": "stuff animal",
"image": {
"url": "https://s3.amazonaws.com/cdn-origin-etr.akc.org/wp-content/uploads/2017/11/13000934/Beagle-On-White-08.jpg",
"width": "50px",
"height": "50px"
}
}
}
我的数据模型如下:
struct DataModel: Codable{
let objectsummary:ObjectSummary
let doors,price, milage, purchasedate, age, favoritetoy: String
private enum CodingKeys: String, CodingKey {case purchasedate = "purchase_date", favoritetoy = "favorite_toy",objectsummary = "object_summary", doors, price, milage,age}
}
struct ObjectSummary:Codable{
let type: String
let name: String
let color: String
let description: String
}
答案 0 :(得分:0)
1:您可以像使用ObjectSummary一样构造结构(结构车,结构计算机等)。
2:具有一个“ root”结构,该结构将包括那些作为字段。
3:最后,将“根”结构发送到解码器。
答案 1 :(得分:0)
您可以尝试使用以下代码的模型。
这将基于我创建的响应数据而起作用。
汽车 将是您的根模型类。
struct Cars: Codable {
let car: Car
}
struct Car: Codable {
let objectSummary: CarObjectSummary
let computer: Computer
let cat: Cat
let dog: Dog
enum CodingKeys: String, CodingKey {
case objectSummary = "object_summary"
case computer, cat, dog
}
}
struct Cat: Codable {
let objectSummary: CatObjectSummary
let age, favoriteToy: String
let image: Image
enum CodingKeys: String, CodingKey {
case objectSummary = "object_summary"
case age
case favoriteToy = "favorite_toy"
case image
}
}
struct Image: Codable {
let url: String
let width, height: String
}
struct CatObjectSummary: Codable {
let type, name, color, description: String
}
struct Computer: Codable {
let objectSummary: CatObjectSummary
let purchaseDate: String
let image: Image
enum CodingKeys: String, CodingKey {
case objectSummary = "object_summary"
case purchaseDate = "purchase_date"
case image
}
}
struct Dog: Codable {
let objectSummary: DogObjectSummary
enum CodingKeys: String, CodingKey {
case objectSummary = "object_summary"
}
}
struct DogObjectSummary: Codable {
let type, name, color, description: String
let age, favoriteToy: String
let image: Image
enum CodingKeys: String, CodingKey {
case type, name, color, description, age
case favoriteToy = "favorite_toy"
case image
}
}
struct CarObjectSummary: Codable {
let type, name, color, description: String
let doors, price, milage: String
}
我已经在模型内部做了一些修改,可以检查一下。它是 与您的 JSON 响应配合得很好。