簡體   English   中英

可編碼Swift 4

[英]Codable Swift 4

我不確定如何使用可編碼來解碼情感場,這對我來說很復雜,因為該JSON的結構...我只需要解析情感場。

{
    "image_id": "HvRRq86gYY96sVNP+lXHYg==",
    "request_id": "1525001300,f1cf060a-dbba-424a-ad75-c315298bbadb",
    "time_used": 444,
    "faces": [
        {
            "attributes": {
                "emotion": {
                    "sadness": 13.562,
                    "neutral": 86.409,
                    "disgust": 0.001,
                    "anger": 0.003,
                    "surprise": 0.002,
                    "fear": 0.022,
                    "happiness": 0.001
                }
            },
            "face_rectangle": {
                "width": 800,
                "top": 451,
                "left": 58,
                "height": 800
            },
            "face_token": "75985eed763e1a7cc9aad61c88f492a1"
        }
    ]
}

使用Codable確實可以解碼json數據。

這是您可以編碼以獲取值的基本對象結構(假設變量數據是您從json獲得的數據類型):

struct FaceRectangle: Codable {
    var width: Int
    var top: Int
    var left: Int
    var height: Int
}

struct Emotion: Codable {
    var sadness: Float
    var neutral: Float
    var disgust: Float
    var anger: Float
    var surprise: Float
    var fear: Float
    var happiness: Float
}

struct Attribute: Codable {
    var emotion: Emotion
}

struct Faces: Codable {
    var attributes: Attribute
    var face_rectangle: FaceRectangle
    var face_token: String
}

struct Result : Codable {
    var image_id: String
    var request_id: String
    var time_used: Int
    var faces: [Faces]
}

do {
    let obj: Result = try JSONDecoder().decode(Result.self, from: data)
    print(obj.faces[0].attributes.emotion.anger)
} catch let err {
    print(err)
}

我還建議閱讀以下Apple文檔,以獲取有關Codable的更多信息。

我強烈建議您從23m: 40sec開始在Codable上觀看WWDC17的視頻。

您需要做的是遵循JSON結構的嵌套Struct。 例如:

struct Data: Codable {
    let image_id: String
    let request_id: String
    let time_used: Int

/// ....
    struct emotion: Codable {
        var sadness: Float
        var neutral: Float
        //etc
    }

}

您確實有一個相當復雜的JSON,但希望能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM