Подтвердить что ты не робот

Словарь для JSON дважды сериализуется в быстром 3

Я пытаюсь сделать почтовый запрос со следующим словарем, который преобразуется в JSON

    let store = [
        "newTask" : [
            "project_name": "iOS",
            "total_time":0,
            "color":"blue"
        ]
    ]

Я сериализую это, используя следующий код, а затем создавая запрос http-POST, используя следующие параметры:

        let jsonData = try? JSONSerialization.data(withJSONObject: store)

        var request = URLRequest(url: URL(string: "http://localhost:3000/store")!)
        request.httpMethod = "POST"
        request.httpBody = jsonData

Я также запускаю json-server https://github.com/typicode/json-server со следующим файлом db.json

{
 "store": [
  {
    "id": 0,
    "ios": {
      "project_name": "iOS",
      "total_time": 0,
      "color": "blue"
    }
  },
  {
    "id": 1,
    "elm": {
      "project_name": "elm",
      "total_time": 0,
      "color": "blue"
    }
  }
]
}

Проблема заключается в том, что недавно добавленный элемент в db выглядит некорректно в следующем формате:

{
  "{\"newTask\":{\"project_name\":\"iOS\",\"total_time\":0,\"color\":\"blue\"}}": "",
  "id": 10
},

Я не уверен, почему он сериализует весь словарь как ключ, а затем пустую строку в качестве значения.

Обновление

Вот код, который отправляет его на сервер:

let task = URLSession.shared.dataTask(with: request) { data, response, error in
                guard let data = data, error == nil else {                                                 // check for fundamental networking error
                    print("error=\(error)")
                    return
                }

                if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {           // check for http errors
                    print("statusCode should be 200, but is \(httpStatus.statusCode)")
                    print("response = \(response)")
                }

                do {
                    if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {
                        print(json)



                    }

                } catch let error {
                    print(error.localizedDescription)
                }

            }
            task.resume()

В качестве побочного примечания я попытался рассказать об этом через почтальона, и все это работает ok. Прикрепите снимок экрана ниже. введите описание изображения здесь

Любая помощь будет оценена, спасибо!

4b9b3361

Ответ 1

Когда вы создадите свой URLRequest, эта строка исправит его для вас?

    request.setValue("application/json", forHTTPHeaderField: "Content-Type")

В Postman вы отправляете его как application/json, поэтому я ожидаю, что вам нужно будет сделать то же самое в своем быстром коде.