JSON Разбор только определенных ключей в Swift

Я работаю над приложением для iOS на языке программирования Swift
У меня есть данные в следующем формате JSON:

 [{
"agid": 10,
"alarmStatus": 8,
"alarmTransactions": [{
    "alarmTransactionID": 1,
    "systemID": 1,
    "agid": 10,
    "assignedTo": "3969ca82-905b-4df6-a30c-30c64c76f8b0",
    "userName": "Shankar",
    "email": "[email protected]",
    "alarmStatus": 3,
    "alarmDate": "1532359240.1231313213"
}, {
    "alarmTransactionID": 2,
    "systemID": 1,
    "agid": 10,
    "assignedTo": "3969ca82-905b-4df6-a30c-30c64c76f8b0",
    "userName": "Satya",
    "email": "[email protected]",
    "alarmStatus": 4,
    "alarmDate": "1532359240.234234325"
}]
}]

Вышеприведенный код имеет определенные пары значений ключа, и меня интересует только получение массива «alarmTransactions» в нижеуказанном объекте структуры.

struct AlarmHistory: Codable {
    let userName: String
    let alarmStatus: Int
    let alarmDate: Double
}

Приведенный ниже код определенно не будет работать, так как в моем json есть много других деталей значения ключа, которые меня не интересуют.

do {
     let alarmsHistory = try JSONDecoder().decode([AlarmHistory].self, from: data)
   } catch {
     print("Exception: \(error.localizedDescription)")
   }

Может ли кто-нибудь предложить мне, как разобрать мои «тревожные транзакции» в объект [AlarmHistory]?


person Satyam    schedule 23.07.2018    source источник
comment
Вы уверены, что ваш код не работает из-за других ключей? Я думаю, что это не удается, потому что вы пытаетесь проанализировать alarmData как двойное, но в вашем JSON это строка.   -  person Milander    schedule 23.07.2018
comment
Я обновил формат json сейчас. Меня не волнует этот формат. Я хочу разобрать массив транзакций.   -  person Satyam    schedule 23.07.2018


Ответы (1)


Вы можете попробовать это

struct AlarmHistory : Codable {
    let agid, alarmStatus: Int
    let alarmTransactions: [AlarmTransaction]
}

struct AlarmTransaction: Codable {
    let alarmTransactionID, systemID, agid: Int
    let assignedTo, userName, email: String
    let alarmStatus: Int
    let alarmDate: String
}

//

do {

    let arr = try JSONDecoder().decode([AlarmHistory].self, from: data) 

    print(arr)

}
catch {

    print(error)
}
person Sh_Khan    schedule 23.07.2018
comment
Спасибо. Но я не хочу иметь другую структуру AlarmTransaction - person Satyam; 23.07.2018
comment
это единственный способ использовать Codable, попробуйте jsonSerialization - person Sh_Khan; 23.07.2018