Данные данные не были допустимы JSON мусор в конце
почему эта ошибка выскакивает
MC] чтение из общедоступных эффективных пользовательских настроек. Ошибка: не удалось декодировать данные в блог: dataCorrupted(Swift.DecodingError.Context(codingPath: [], debugDescription: "данные были недопустимы в JSON.", underlyingError: Optional(Error Domain=NSCocoaErrorDomain Code=3840 "мусор в конце." UserInfo={NSDebugDescription=мусор в конце.})))
у меня есть этот JSON
{"Response":"false","Info":[{"Estatus":"Sin Conexion"}]}
это структура моего json в swift
struct Blog: Decodable { let Response: String let articles: [Article] enum CodingKeys : String, CodingKey { case Response case articles = "Info" } } struct Article: Decodable { let Estatus: String }
и это все мой код
let id1 = UserDefaults.standard.string(forKey: "id1conductor") let id1pa = UserDefaults.standard.string(forKey: "idUser") if adondevaxd.text == "" || adondevaxd.text == " " || adondevaxd.text == "123" || adondevaxd.text == "abc" || adondevaxd.text == "." { self.displayAlert(title: "Usuario", message: "Debe elegir un destino") } let myURL = URL(string: "hehe") var request = URLRequest(url: myURL!) request.httpMethod = "POST" let posString = "ID_Conductor=\(id1!)&Destino=\(adondevaxd.text!)&ID_Pasajero=\(id1pa!)" request.httpBody = posString.data(using: .utf8) let task = URLSession.shared.dataTask(with: request) { data, response, error in if let error = error { print("error=\(error)") return } guard let data = data else { print("Something wrong") return } **// THIS SHOULD BE a valid JSON but is not i have the same in another PHP and it works** struct Blog: Decodable { let Response: String let articles: [Article] enum CodingKeys : String, CodingKey { case Response case articles = "Info" } } struct Article: Decodable { let Estatus: String } do { let blog = try JSONDecoder().decode(Blog.self, from: data) DispatchQueue.main.async { if blog.Response == "true" { //para ver como actua el json // print(blog) for article in blog.articles { let tipoResponse = article.Estatus if tipoResponse == "Solicitado" { self.displayAlert(title: "Usuario", message: "El conductor será notificado, espera la respuesta") self.buttonOulet.isHidden = true self.adondevaxd.isHidden = true self.adondevaxd.text = "" self.adondequiereirxd.isHidden = true self.enviarDestino4.isHidden = true self.enviarDestino3.isHidden = true self.enviarDestino2.isHidden = true self.enviarDestino1.isHidden = true self.credencial1.isHidden = true self.Credencial2.isHidden = true self.Credencial3.isHidden = true self.Credencial4.isHidden = true } else if tipoResponse == "Ocupado" { self.displayAlert(title: "Usuario", message: "El conductor ya se encuentra ocupado, selecciona otro") self.map.isHidden = false self.buttonOulet.isHidden = false self.adondevaxd.isHidden = true self.adondevaxd.text = "" self.adondequiereirxd.isHidden = true self.enviarDestino4.isHidden = true self.enviarDestino3.isHidden = true self.enviarDestino2.isHidden = true self.enviarDestino1.isHidden = true self.credencial1.isHidden = true self.Credencial2.isHidden = true self.Credencial3.isHidden = true self.Credencial4.isHidden = true } else if tipoResponse == "Solicitado" { self.displayAlert(title: "Usuario", message: "Se envio tu solicitud al conductor, porfavor ten paciencia") self.adondequiereirxd.isHidden = true self.adondevaxd.isHidden = true self.adondequiereirxd.isHidden = true } break } } else if blog.Response == "false" { self.displayAlert(title: "Usuario", message: "No hay conexion") self.map.isHidden = false self.buttonOulet.isHidden = false self.adondevaxd.isHidden = true self.adondequiereirxd.isHidden = true self.adondevaxd.text = "" self.enviarDestino4.isHidden = true self.enviarDestino3.isHidden = true self.enviarDestino2.isHidden = true self.enviarDestino1.isHidden = true self.credencial1.isHidden = true self.Credencial2.isHidden = true self.Credencial3.isHidden = true self.Credencial4.isHidden = true } } } catch { print("Error: Couldn't decode data into Blog:", error) return } } task.resume() }
неужели мой PHP ошибается?
какие-нибудь намеки? :С
<?php require_once '../data/d.php'; error_reporting(0); if(isset($_POST['ID_Pasajero'])){ $Comparacion = "SELECT * FROM Solicitudes where ID_Conductor = '".$_POST['ID_Conductor']."' and Estado != '2'"; $R = $conexion->query($Comparacion); $Count = mysqli_num_rows($R); if ($Count > 0) { $Comparacion = "SELECT * FROM Solicitudes where ID_Pasajero = '".$_POST['ID_Pasajero']."' and Estado != '2'"; $R = $conexion->query($Comparacion); $Count = mysqli_num_rows($R); if ($Count > 0) { $Resultado = '{"Response":"true","Info":[{"Estatus":"Pendiente"}]}'; }else{ $Resultado = '{"Response":"true","Info":[{"Estatus":"Ocupado"}]}'; } }else{ $Comparacion = "SELECT * FROM Solicitudes where ID_Pasajero = '".$_POST['ID_Pasajero']."' and Estado != '2'"; $R = $conexion->query($Comparacion); $Count = mysqli_num_rows($R); if ($Count > 0) { $Resultado = '{"Response":"true","Info":[{"Estatus":"Pendiente"}]}'; }else{ $sql = "INSERT INTO Solicitudes(ID_Pasajero, ID_Conductor, Destino, Estado, Estado_Calificacion) VALUES ('$_POST[ID_Pasajero]', '$_POST[ID_Conductor]', '$_POST[Destino]', '0', '0')"; $Resultado = '{"Response":"true","Info":[{"Estatus":"Solicitado"}]}'; } } } if ($conexion->query($Comparacion) === TRUE) { if ($conexion->query($sql) === TRUE) { echo $Resultado; } else { echo $Resultado; } } else { if ($conexion->query($sql) === TRUE) { echo $Resultado; } echo '{"Response":"false","Info":[{"Estatus":"Sin Conexion"}]}'; } $conexion->close(); ?>
Что я уже пробовал:
изменение всего кода на множество различных способов
Richard MacCutchan
Сообщение кажется довольно ясным. По какой-то причине после JSON появляются дополнительные символы.
Bryian Tan
вы проверили, что возврат находится в формате JSON?