Кодируемый Свифт 4 - PullRequest
       33

Кодируемый Свифт 4

0 голосов
/ 29 апреля 2018

Я не уверен, как декодировать эмоциональное поле с помощью кодируемого, это сложно для меня из-за структуры этого 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"
        }
    ]
}

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Я настоятельно рекомендую смотреть это видео с WWDC17 на Кодируемый , начиная с 23м: 40сек.

Вам нужно иметь вложенную структуру, которая следует структуре JSON. Например:

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, но надеюсь, что это поможет.

0 голосов
/ 29 апреля 2018

Использование 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)
}

Я также предлагаю прочитать следующую яблочную документацию для получения дополнительной информации о Codable.

...