Как получить значения, если в словаре несколько имен json? - PullRequest
0 голосов
/ 07 мая 2019

У меня есть этот JSON с ответом, имеющим более одного поля с одинаковым именем ключевого значения. Как я могу получить к ним доступ?Я использую Codable в swift, и я могу получить доступ к первому «значению» из «pricingInfo», но как мне получить доступ к другим ценамInfo s?

"fareComponentList":[  
   {  
      "passengerFareInfoList":[  
         {  
            "passengerTypeQuantity":{  
               "passengerType":{  
                  "code":"CHLD"
               },
               "quantity":1,
               "hasStrecher":false
            },
            "pricingInfo":{  
               "baseFare":{  
                  "amount":{  
                     "currency":{  
                        "code":"USD"
                     },
                     "value":45
                  }
               },
               "fees":{  
                  "totalAmount":{  
                     "currency":{  
                        "code":"USD"
                     },
                     "value":0
                  }
               },
               "totalFare":{  
                  "amount":{  
                     "accountingSign":"ADC",
                     "currency":{  
                        "code":"USD"
                     },
                     "value":72
                  }
               },
               "fareConstruction":"",
               "passengerTypeCode":"CHLD",
               "surcharges":{  
                  "totalAmount":{  
                     "currency":{  
                        "code":"USD"
                     },
                     "value":24
                  },
                  "surchargeList":[  
                     {  
                        "surchargeAmount":{  
                           "currency":{  
                              "code":"USD"
                           },
                           "value":24
                        },
                        "surchargeCode":"YQ",
                        "surchargeType":"S",
                        "paid":false
                     }
                  ]
               },
               "taxes":{  
                  "taxList":[  
                     {  
                        "paid":false,
                        "taxAmount":{  
                           "currency":{  
                              "code":"USD"
                           },
                           "value":1
                        },
                        "taxCode":"AF",
                        "taxType":"T"
                     },
                     {  
                        "paid":false,
                        "taxAmount":{  
                           "currency":{  
                              "code":"USD"
                           },
                           "value":2
                        },
                        "taxCode":"M5",
                        "taxType":"T"
                     }
                  ],
                  "totalAmount":{  
                     "currency":{  
                        "code":"USD"
                     },
                     "value":3
                  }
               },
               "discountApplied":false,
               "fareBaggageAllowance":0
            },
            "fareInfoList":[  
               {  
                  "cabinClassCode":"Y",
                  "fareReferenceCode":"x",
                  "flightSegmentSequence":1,
                  "fareReferenceName":"x",
                  "fareGroupName":"x",
                  "resBookDesigCode":"S",
                  "fareReferenceID":"x"
               }
            ]
         },
         {  
            "passengerTypeQuantity":{  
               "passengerType":{  
                  "code":"ADLT"
               },
               "quantity":1,
               "hasStrecher":false
            },
            "pricingInfo":{  
               "baseFare":{  
                  "amount":{  
                     "currency":{  
                        "code":"USD"
                     },
                     "value":60
                  }
               },
               "fees":{  
                  "totalAmount":{  
                     "currency":{  
                        "code":"USD"
                     },
                     "value":0
                  }
               },
               "totalFare":{  
                  "amount":{  
                     "accountingSign":"ADC",
                     "currency":{  
                        "code":"USD"
                     },
                     "value":87
                  }
               },
               "fareConstruction":"",
               "passengerTypeCode":"ADLT",
               "surcharges":{  
                  "totalAmount":{  
                     "currency":{  
                        "code":"USD"
                     },
                     "value":24
                  },
                  "surchargeList":[  
                     {  
                        "surchargeAmount":{  
                           "currency":{  
                              "code":"USD"
                           },
                           "value":24
                        },
                        "surchargeCode":"YQ",
                        "surchargeType":"S",
                        "paid":false
                     }
                  ]
               },
               "taxes":{  
                  "taxList":[  
                     {  
                        "paid":false,
                        "taxAmount":{  
                           "currency":{  
                              "code":"USD"
                           },
                           "value":1
                        },
                        "taxCode":"AF",
                        "taxType":"T"
                     },
                     {  
                        "paid":false,
                        "taxAmount":{  
                           "currency":{  
                              "code":"USD"
                           },
                           "value":2
                        },
                        "taxCode":"M5",
                        "taxType":"T"
                     }
                  ],
                  "totalAmount":{  
                     "currency":{  
                        "code":"USD"
                     },
                     "value":3
                  }
               },
               "discountApplied":false,
               "fareBaggageAllowance":0
            },
            "fareInfoList":[  
               {  
                  "cabinClassCode":"Y",
                  "fareReferenceCode":"x",
                  "flightSegmentSequence":1,
                  "fareReferenceName":"x",
                  "fareGroupName":"x",
                  "resBookDesigCode":"S",
                  "fareReferenceID":"x"
               }
            ]
         },
         {  
            "passengerTypeQuantity":{  
               "passengerType":{  
                  "code":"INFT"
               },
               "quantity":1,
               "hasStrecher":false
            },
            "pricingInfo":{  
               "baseFare":{  
                  "amount":{  
                     "currency":{  
                        "code":"USD"
                     },
                     "value":6
                  }
               },
               "fees":{  
                  "totalAmount":{  
                     "currency":{  
                        "code":"USD"
                     },
                     "value":0
                  }
               },
               "totalFare":{  
                  "amount":{  
                     "accountingSign":"ADC",
                     "currency":{  
                        "code":"USD"
                     },
                     "value":6
                  }
               },
               "fareConstruction":"",
               "passengerTypeCode":"INFT",
               "surcharges":{  
                  "totalAmount":{  
                     "currency":{  
                        "code":"USD"
                     },
                     "value":0
                  }
               },
               "taxes":{  
                  "totalAmount":{  
                     "currency":{  
                        "code":"USD"
                     },
                     "value":0
                  }
               },
               "discountApplied":false,
               "fareBaggageAllowance":0
            },
            "fareInfoList":[  
               {  
                  "cabinClassCode":"Y",
                  "fareReferenceCode":"x",
                  "flightSegmentSequence":1,
                  "fareReferenceName":"x",
                  "fareGroupName":"x",
                  "resBookDesigCode":"S",
                  "fareReferenceID":"x"
               }
            ]
         }
      ],
      "pricingOverview":{  
         "totalTax":{  
            "accountingSign":"ADC",
            "currency":{  
               "code":"USD"
            },
            "value":6
         },
         "totalAmount":{  
            "accountingSign":"ADC",
            "currency":{  
               "code":"USD"
            },
            "value":165
         },
         "totalPenalty":{  
            "accountingSign":"ADC",
            "currency":{  
               "code":""
            },
            "value":0
         },
         "totalBaseFare":{  
            "accountingSign":"ADC",
            "currency":{  
               "code":"USD"
            },
            "value":111
         },
         "equivTotalAmountList":[  
            {  
               "accountingSign":"ADC",
               "currency":{  
                  "code":""
               },
               "value":0
            }
         ],
         "totalSurcharge":{  
            "accountingSign":"ADC",
            "currency":{  
               "code":"USD"
            },
            "value":48
         },
         "totalDiscount":{  
            "accountingSign":"ADC",
            "currency":{  
               "code":""
            },
            "value":0
         },
         "totalServiceCharge":{  
            "accountingSign":"ADC",
            "currency":{  
               "code":""
            },
            "value":0
         },
         "totalOtherFee":{  
            "accountingSign":"ADC",
            "currency":{  
               "code":""
            },
            "value":0
         }
      }
   }
]

Что я пытаюсь сделать, это сохранить «значение»"от каждого

"pricingInfo":{  
   "baseFare":{  
      "amount":{  
         "currency":{  
            "code":"USD"
         },
         "value":45
      };

Как я могу это сделать? (В основном я пытаюсь получить цену для взрослых, детей и младенцев)

1 Ответ

1 голос
/ 07 мая 2019

Для вашего JSON это могут быть ваши кодируемые модели.

typealias FareComponentList = [FareComponentListElement]

struct FareComponentListElement: Codable {
    let passengerFareInfoList: [PassengerFareInfoList]
    let pricingOverview: PricingOverview
}

struct PassengerFareInfoList: Codable {
    let passengerTypeQuantity: PassengerTypeQuantity
    let pricingInfo: PricingInfo
    let fareInfoList: [FareInfoList]
}

struct FareInfoList: Codable {
    let cabinClassCode, fareReferenceCode: String
    let flightSegmentSequence: Int
    let fareReferenceName, fareGroupName, resBookDesigCode, fareReferenceID: String
}

struct PassengerTypeQuantity: Codable {
    let passengerType: Currency
    let quantity: Int
    let hasStrecher: Bool
}

struct Currency: Codable {
    let code: Code
}

enum Code: String, Codable {
    case adlt = "ADLT"
    case chld = "CHLD"
    case empty = ""
    case inft = "INFT"
    case usd = "USD"
}

struct PricingInfo: Codable {
    let baseFare: BaseFare
    let fees: Fees
    let totalFare: TotalFare
    let fareConstruction: String
    let passengerTypeCode: Code
    let surcharges: Surcharges
    let taxes: Taxes
    let discountApplied: Bool
    let fareBaggageAllowance: Int
}

struct BaseFare: Codable {
    let amount: Amount
}

struct Amount: Codable {
    let currency: Currency
    let value: Int
}

struct Fees: Codable {
    let totalAmount: Amount
}

struct Surcharges: Codable {
    let totalAmount: Amount
    let surchargeList: [SurchargeList]?
}

struct SurchargeList: Codable {
    let surchargeAmount: Amount
    let surchargeCode, surchargeType: String
    let paid: Bool
}

struct Taxes: Codable {
    let taxList: [TaxList]?
    let totalAmount: Amount
}

struct TaxList: Codable {
    let paid: Bool
    let taxAmount: Amount
    let taxCode, taxType: String
}

struct TotalFare: Codable {
    let amount: TotalAmount
}

struct TotalAmount: Codable {
    let accountingSign: AccountingSign
    let currency: Currency
    let value: Int
}

enum AccountingSign: String, Codable {
    case adc = "ADC"
}

struct PricingOverview: Codable {
    let totalTax, totalAmount, totalPenalty, totalBaseFare: TotalAmount
    let equivTotalAmountList: [TotalAmount]
    let totalSurcharge, totalDiscount, totalServiceCharge, totalOtherFee: TotalAmount
}

Используя вышеупомянутые модели, можно получить доступ к следующим значениям.

let passengerType = fareComponentList[0].passengerFareInfoList[0].passengerTypeQuantity.passengerType // ADLT / CHLD / INFT
let amount = fareComponentList[0].passengerFareInfoList[0].pricingInfo.baseFare.amount.value
...