繁体   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