简体   繁体   中英

How to parse JSON with PHP and Swift 5

I'm parsing JSON in my app via PHP, my messaging center was working fine but now it just stopped working. I'm using Swift 5, PHP and MySQL.

When I attempt to view the page in the app, I get a JSON error saying,

'The data cannot be read because it is not in the right format'.

Other pages using the same code are not having this problem.

I've tried different attributes to JSONSerialization but nothing has worked.

Swift 5 code to load messages from php

func loadMessages() {


    let username = user!["username"] as! String
    let url = URL(string: "https://www.xxxx.com/messagecenter.php")!
   var request = URLRequest(url: url)

    request.httpMethod = "POST"
    let body = "username=\(username)"
    request.httpBody = body.data(using: String.Encoding.utf8)

    URLSession.shared.dataTask(with: request) { data, response, error in

        DispatchQueue.main.async(execute: {

            if error == nil {

                do {

                    let json : NSDictionary? = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? NSDictionary

                    self.tableView.reloadData()

                    guard let parseJSON = json else {
                        print("Error while parsing")
                        return
                    }

                    guard let messages = parseJSON["messages"] as? [AnyObject] else {
                        print("Error while parseJSONing")
                        return
                    }
                   self.hhmessages = messages

                    for i in 0 ..< self.hhmessages.count {

                    let path = self.hhmessages[i]["ava"] as? String

                        if !path!.isEmpty {
                            let url = URL(string: path!)!

                            let imageData = try? Data(contentsOf: url) 
     let image = UIImage(data: imageData!)! 
     self.avas.append(image) // append found image to [images] var
                        } else {
                            let image = UIImage()

                            self.avas.append(image) 

                        }

                    }

      self.tableView.reloadData()


                } catch {
                    Helper().showAlert(title: "JSON Error", message: error.localizedDescription, in: self)
                    return
                }

            } else {
            }

        })

        }.resume()

}

PHP Code

$access->connect();
$returnArray = array();
if (!empty($_REQUEST["uuid"]) && empty($_REQUEST["id"])) {


// STEP 2.1 Get uuid of post and path to post picture passed to this php file via swift POST
$uuid = htmlentities($_REQUEST["uuid"]);
//$path = htmlentities($_REQUEST["path"]);

// STEP 2.2 Delete post according to uuid
$result = $access->deleteMessage($uuid);

if (!empty($result)) {
    $returnArray["message"] = "Successfully deleted";
    $returnArray["result"] = $result;

} else {
    $returnArray["message"] = "Could not delete post";
}

 }
 else {

// STEP 2.1 Pass POST / GET via html encrypt and assign passed id of user to $id var
$username = htmlentities($_REQUEST["username"]);


// STEP 2.2 Select posts + user related to $id
$messages = $access->messageCenter($username);

// STEP 2.3 If posts are found, append them to $returnArray
if ($messages) {
    $returnArray['messages'] = $messages;
}

}
       //   STEP 3. Close connection
 $access->disconnect();


 // STEP 4. Feedback information
 echo json_encode($returnArray);

 ?>

The code should display the inbox for the user.

Solved the issue using the following steps:

  1. Printed print(String(data: data!, encoding: .utf8))
  2. Error message showed me that my file was being blocked by GoDaddy
  3. Added my page to the whitelist on godaddy's security portal
  4. It worked.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM