Я получаю следующий JSON в моем сервисе API: < /p>
{
"status": "success",
"data": {
"expense_id": "6dcf894f-ceac-44e2-8abd-9a92c80ca5df",
"description": "New Rent Buddy",
"category": "Social Life",
"total_amount": "150.00",
"paid_by": "a1b2c3d4-1234-5678-9101-abcdef123456",
"user_paid_amount": 0,
"group_members": [
{
"user_id": "2cfa8e79-bcc5-434a-86fb-ca118179de69",
"name": "AAA",
"amount_due": "24.00",
"amount_paid": "0.00",
"status": 0
},
{
"user_id": "b2c3d4e5-2345-6789-1011-bcdefa234567",
"name": "BBBB",
"amount_due": "50.00",
"amount_paid": "0.00",
"status": 0
}
]
}
}
< /code>
Когда я выхожу из журнала доступных ключей в объекте данных, в моем файле службы API я получаю следующий вывод: < /p>
["user_paid_amount", "expense_id", "paid_by", "group_members", "description", "total_amount", "category"] which is correct.
< /code>
Однако, как только я прохожу его через следующее: < /p>
let expenseDetails = try decoder.decode(ExpenseDetailsResponse.self, from: data)
< /code>
И я регистрирую, какие ключи мы получили для объекта данных снова, я получаю только следующее: < /p>
[CodingKeys(stringValue: "category", intValue: nil), CodingKeys(stringValue: "description", intValue: nil)]
Где мои другие переменные, такие как earpense_id , total_amount ?
struct ExpenseDetailsResponse: Codable {
let status: String
let data: ExpenseDetails
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
print("Type of `container`: \(type(of: container))")
status = try container.decode(String.self, forKey: .status)
print("Available Keys in Response BEFORE DECODING: \(container.allKeys)")
let dataContainer: KeyedDecodingContainer
do {
dataContainer = try container.nestedContainer(keyedBy: ExpenseDetails.CodingKeys.self, forKey: .data)
print("Extracted `data` as Dictionary BEFORE DECODING: \(dataContainer.allKeys)")
} catch {
print("ERROR: Failed to extract raw `data` before decoding: \(error)")
throw error
}
//Decoding `data` from `dataContainer`
data = try container.decode(ExpenseDetails.self, forKey: .data)
}
}
< /code>
struct ExpenseDetails: Codable {
let expense_id: String
let description: String
let category: String
let total_amount: Double
let paid_by: String
let user_paid_amount: Double
let group_members: [GroupMember]
Подробнее здесь: https://stackoverflow.com/questions/795 ... iables-are
Невозможно расшифровать весь JSON через декодер, только выбранные переменные декодируются ⇐ IOS
Программируем под IOS
1741781621
Anonymous
Я получаю следующий JSON в моем сервисе API: < /p>
{
"status": "success",
"data": {
"expense_id": "6dcf894f-ceac-44e2-8abd-9a92c80ca5df",
"description": "New Rent Buddy",
"category": "Social Life",
"total_amount": "150.00",
"paid_by": "a1b2c3d4-1234-5678-9101-abcdef123456",
"user_paid_amount": 0,
"group_members": [
{
"user_id": "2cfa8e79-bcc5-434a-86fb-ca118179de69",
"name": "AAA",
"amount_due": "24.00",
"amount_paid": "0.00",
"status": 0
},
{
"user_id": "b2c3d4e5-2345-6789-1011-bcdefa234567",
"name": "BBBB",
"amount_due": "50.00",
"amount_paid": "0.00",
"status": 0
}
]
}
}
< /code>
Когда я выхожу из журнала доступных ключей в объекте данных, в моем файле службы API я получаю следующий вывод: < /p>
["user_paid_amount", "expense_id", "paid_by", "group_members", "description", "total_amount", "category"] which is correct.
< /code>
Однако, как только я прохожу его через следующее: < /p>
let expenseDetails = try decoder.decode(ExpenseDetailsResponse.self, from: data)
< /code>
И я регистрирую, какие ключи мы получили для объекта данных снова, я получаю только следующее: < /p>
[CodingKeys(stringValue: "category", intValue: nil), CodingKeys(stringValue: "description", intValue: nil)]
Где мои другие переменные, такие как earpense_id , total_amount ?
struct ExpenseDetailsResponse: Codable {
let status: String
let data: ExpenseDetails
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
print("Type of `container`: \(type(of: container))")
status = try container.decode(String.self, forKey: .status)
print("Available Keys in Response BEFORE DECODING: \(container.allKeys)")
let dataContainer: KeyedDecodingContainer
do {
dataContainer = try container.nestedContainer(keyedBy: ExpenseDetails.CodingKeys.self, forKey: .data)
print("Extracted `data` as Dictionary BEFORE DECODING: \(dataContainer.allKeys)")
} catch {
print("ERROR: Failed to extract raw `data` before decoding: \(error)")
throw error
}
//Decoding `data` from `dataContainer`
data = try container.decode(ExpenseDetails.self, forKey: .data)
}
}
< /code>
struct ExpenseDetails: Codable {
let expense_id: String
let description: String
let category: String
let total_amount: Double
let paid_by: String
let user_paid_amount: Double
let group_members: [GroupMember]
Подробнее здесь: [url]https://stackoverflow.com/questions/79503468/unable-to-decode-the-entire-json-through-the-decoder-only-select-variables-are[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия