Swift JSONSerialization, как правильно отформатировать REST сервер? - PullRequest
0 голосов
/ 07 октября 2019

У меня проблемы со связью с REST-сервером. Я могу сделать звонок с успехом, используя Postman в качестве теста, чтобы убедиться в правильности тела JSON, которое выглядит следующим образом:

{
    "name": "camera.setOptions",
    "parameters": {
        "options": {
            "exposureProgram": 2,
            "fileFormat": { 
                    "type": "raw+",
                    "width": 6720,
                    "height": 3360
            },
            "_autoBracket": {
                "_bracketNumber": 3,
                "_bracketParameters": [
                    {
                        "aperture": 2.1,
                        "iso": 400,
                        "shutterSpeed": 0.002
                    },
                    {
                        "aperture": 2.1,
                        "iso": 400,
                        "shutterSpeed": 0.008
                    },
                    {
                        "aperture": 2.1,
                        "iso": 400,
                        "shutterSpeed": 0.0333
                    }
                ]
            }
        }
    }
}

Однако в Swift я сначала генерирую JSON_bodyObj , который я использую для создания URLRequest, где я устанавливаю тело с помощью: try self.request.httpBody = JSONSerialization.data(withJSONObject: JSON_bodyObj), который завершается неудачно (возвращает ошибку с сервера), когда я пытаюсь выполнить запрос.

Вот как я создаю JSON_bodyObj :

JSON_bodyObj = [
    "name": "camera.setOptions",
    "parameters": [
        "options": [
            "_function": "normal",
            "exposureProgram": 1,
            "fileFormat": [
                "type": "raw+",
                "width": 6720,
                "height": 3360
            ],
            "_autoBracket": [
                "_bracketNumber": 3,
                "_bracketParameters" : [
                    [
                        "aperture": 2.1,
                        "iso": 400,
                        "shutterSpeed": 0.002
                    ],
                    [
                        "aperture": 2.1,
                        "iso": 400,
                        "shutterSpeed": 0.008
                    ],
                    [
                        "aperture": 2.1,
                        "iso": 400,
                        "shutterSpeed": 0.0333
                    ]
                ]
            ]
        ]
    ]
]

self.request.setValue("application/json;charset=utf-8", forHTTPHeaderField: "Content-Type")
self.request.setValue("application/json", forHTTPHeaderField: "Accept")
self.request.httpMethod = "POST"

try self.request.httpBody = JSONSerialization.data(withJSONObject: JSON_bodyObj)
let task = URLSession.shared.dataTask(with: self.request) { (data, response, error)//Closure }
task.resume()

Когда я исключаю блок _autoBracket , запрос успешно выполняется (хотя, очевидно, он не делает все, что мне нужно).

Я неправильно строю начальную JSON_bodyObj ?

...