0

Swiftは言うまでもなく、私はプログラミングに非常に慣れていません。以前のプログラミングの試みからいくつかの概念を理解しているので、これまで以上に進んでいます。必要なものが明確でない場合はお詫び申し上げます。

アラートのリストのJSONデータを取得しています.swiftyJSONでデータを解析しようとしていますが、うまくいっていると思います.この arrary 内の辞書内に電子メール アドレスがあり、さまざまな辞書が互いに類似したキーを使用します。

構造体、関数、JSON データをお見せします。メールアドレス、サービス、ID、ラベルを取得するのを手伝ってください。また、示されているデータのように複数のサービスが存在する可能性があり、それらすべてをキャプチャする必要があります。

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": "hidden@hidden.com",
                "label": "hidden@hidden.com"
            },
            {
                "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 に個々のアラートを入力します。

4

2 に答える 2