Я очень новичок в программировании, не говоря уже о Swift. Я понимаю некоторые концепции из предыдущих попыток программирования, поэтому я продвинулся дальше, чем когда-либо прежде. Прошу прощения, если не совсем понятно, что мне нужно.
Я извлекаю данные JSON из списка предупреждений и пытаюсь проанализировать данные с помощью swiftyJSON, который, я думаю, работает нормально, но я столкнулся с проблемой при попытке получить некоторые данные из некоторых словарей в массиве, и, к сожалению, внутри словаря внутри этого массива находится адрес электронной почты, и разные словари используют одинаковые ключи друг в друге.
Я собираюсь показать вам свою структуру, функции и данные JSON. Пожалуйста, помогите мне получить адрес электронной почты, услугу - ее идентификатор и ее метку. Кроме того, может быть более одной службы, как в показанных данных, и мне нужно захватить их все.
ЗДЕСЬ ДАННЫЕ JSON:
{
"hasNext": false,
"data": [
{
"status": [
1,
"READ"
],
"resolutionStatus": [
0,
"OPEN"
],
"description": "There is some description here",
"title": "Some Activity",
"entities": [
{
"view_name": "audits",
"type": "link",
"parameters": {
"orgUnit": "/"
},
"label": "/"
},
{
"type": "user",
"id": "[email protected]",
"label": "[email protected]"
},
{
"type": "service",
"id": 6666,
"label": "someService"
},
{
"type": "service",
"id": 7777,
"label": "anotherService"
}
],
"stories": [
5
],
"date": "2014-12-10T23:46:28.067000Z",
"audits": [
"ljBhqKQVOF9w",
"pISQyT9iy9w",
"oynGf2_CIw"
],
"_id": "54fdad0dfd",
"id": [
14683,
"ALERT_SOME_ACTIVITY"
],
"severity": [
5,
"HIGH"
]
}
Вот моя структура:
struct AlertModel: Printable {
let alertUser: String?
let alertService: String?
let alertTitle: String?
let alertReadStatus: String?
let alertResolutionStatus: String?
let alertDescription: String?
let alertEntities: Array <String> = []
let alertDate: String?
let alertAudits: Array <String> = []
let alertId: String?
let
alertSeverity: String?
// change description to print to console
var description: String {
return "User: \(alertUser)\nService: \(alertService)\nTitle: \(alertTitle!)\nRead Status: \(alertReadStatus!)\nResolution Status: \(alertResolutionStatus!)\nDescription: \(alertDescription!)\nDate: \(alertDate!)\nAlert ID: \(alertId!)\nSeverity: \(alertSeverity!)\n******************************************\n"
}
init(alertUser: String?, alertService: String?, alertTitle: String?, alertReadStat
us: String?, alertResolutionStatus: String?, alertDescription: String?/*, alertEntities: Array<String>*/, alertDate: String?/*, alertAudits: Array<String>*/, alertId: String?, alertSeverity: String?) {
self.alertUser = alertUser
self.alertService = alertService
self.alertTitle = alertTitle
self.alertReadStatus = alertReadStatus
self.alertResolutionStatus = alertResolutionStatus
self.alertDescription = alertDescription
//self.alertEntities = alertEntities
self.alertDate = alertDate
//self.alertAudits = alertAudits
self.alertId = alertId
self.alertSeverity = alertSeverity
}
А ВОТ ФУНКЦИЯ:
let jsonAlert = JSON(data: jsonAlertObject)
if let alertArray = jsonAlert["data"].array {
var alerts = [AlertModel]()
for alertDict in alertArray {
let alertTitle: String? = alertDict["title"].stringValue
let alertReadStatus: String? = alertDict["status"][1].stringValue
let alertResolutionStatus: String? = alertDict["resolutionStatus"][1].stringValue
let alertDescription: String? = alertDict["description"].stringValue
let alertDate: String? = alertDict["date"].stringValue
let alertId: String? = alertDict["_id"].stringValue
// Need to grab the type and label from each dictionary in the array of entities
let alertEntitiesArray: Array? = alertDict["entities"].arrayObject
var arrayIndex = 0
var entitiesDict = ["" : ""]
while arrayIndex < alertEntitiesArray?.count {
entitiesDict[alertDict["entities"][arrayIndex]["type"].stringValue] = alertDict["entities"][arrayIndex]["label"].stringValue
arrayIndex++
}
let alertService: String? = entitiesDict["service"]
let alertUser: String? = entitiesDict["user"]
let alertSeverity: String? = alertDict["severity"][1].stringValue
let alert = AlertModel(alertUser: alertUser, alertService: alertService, alertTitle: alertTitle, alertReadStatus: alertReadStatus, alertResolutionStatus: alertResolutionStatus, alertDescription: alertDescription, alertDate: alertDate, alertId: alertId, alertSeverity: alertSeverity)
alerts.append(alert)
var alertsDictionaryByID = [alertId!: alert]
}
println(alerts)
}
Как видите, данные JSON имеют несколько уровней глубины. У меня нет проблем с получением данных и их извлечением. Проблема в том, что массив «Сущности» не всегда может содержать одни и те же данные. У меня есть несколько сервисов, у него может не быть адреса электронной почты, у него может быть совершенно другой набор данных для первого значения массива.
Я пытаюсь получить адрес электронной почты. Если бы я мог найти способ поиска «пользователя», как с данными словаря, а затем, когда он был бы найден, он вернул бы значение индекса массива, чтобы иметь возможность ссылаться на него напрямую, потому что я никогда не узнаю с номером индекса значение пользователя является частью .
Я надеюсь, что я понял достаточно ясно, и кто-то может мне помочь. --- моим следующим шагом будет заполнение listView каждым отдельным предупреждением.