#swift #alamofire #alamofire-request #alamofire-upload
Вопрос:
let parameters = ["lat": latitude, "lng": longitude]
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-type")
guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: []) else { return }
request.httpBody = httpBody
let session = URLSession.shared
session.dataTask(with: request) { (data, response, error) in
if let response = response {
print(response)
}
if let httpResponse = response as? HTTPURLResponse {
print(httpResponse.statusCode)
}
if let data = data {
do {
let jsonDecoder = JSONDecoder()
var parsedJSON = try jsonDecoder.decode([UserCoords].self, from: data)
parsedJSON.append(Vac_Pass.UserCoords(lat: latitude, lng: longitude))
let wer = try? JSONEncoder().encode(parsedJSON)
let json = try JSONSerialization.jsonObject(with: wer!, options: [])
print(json)
print(json)
} catch {
print(error)
}
}
}.resume()
Поскольку в ответе http post указано «200», это указывает на то, что запрос выполнен успешно, но не удалось загрузить новые данные. Если бы данные были загружены, они бы напечатали «201». Я думаю, что с моим веб-сервером localhost может быть что-то не так.
Локальный хост, по сути, представляет собой файл JSON, который содержит такие координаты:
[
{"lat" : 38.8976, "lng" : -77.0369 } ,
{"lat" : 38.8980, "lng" : -77.0363 } ,
{"lat" : 38.8990, "lng" : -77.0367 }
]
Спасибо — все вклады приветствуются :).
Комментарии:
1. Декодируйте JSON в объект. Затем добавьте новое содержимое в объект. Затем закодируйте объект обратно в JSON. // На каждом из этих шагов уже есть много примеров на сайте, пожалуйста, проведите некоторое исследование, легко найти решение. Ключ в том, чтобы разбить вашу цель на более мелкие подзадачи.
2. Спасибо за помощь, но я все еще не понимаю, как на самом деле заменить данные в моем файле localhost моими новыми данными JSON. Я закодировал обратно в JSON следующим образом: let wer = попробуйте JSONEncoder().encode(parsedJSON) let json = Строка(данные: wer, кодировка: .utf8)
3. Первый вопрос: почему вы преобразуете свой объект JSON в строку с
let json = String(data: wer, encoding: .utf8)
помощью ? Вам никогда не нужно этого делать, за исключением, возможно, печати во время отладки. Ваши данные JSONwer
, они у вас есть, не нуждаются в дальнейших преобразованиях. Тогда, если ты хочешь сохранить его… просто сделай это. Сохраните его в локальном файле. Много учебных пособий о том, как это сделать.4. Я ценю вашу помощь и приношу извинения за то, что задаю так много вопросов. Я обновил свой вопрос своим новым кодом, чтобы посмотреть на него. В принципе, он распечатывает новый файл JSON, но запрос post, похоже, не работает. Там написано «200», а не «201», поэтому данные не загружаются.