【问题标题】:How to parse JSON with PHP and Swift 5如何使用 PHP 和 Swift 5 解析 JSON
【发布时间】:2019-12-29 19:01:09
【问题描述】:

我正在通过 PHP 在我的应用程序中解析 JSON,我的消息中心工作正常,但现在它停止工作了。我正在使用 Swift 5、PHP 和 MySQL。

当我尝试在应用程序中查看页面时,我收到一条 JSON 错误提示,

'无法读取数据,因为它的格式不正确'。

使用相同代码的其他页面没有此问题。

我尝试了 JSONSerialization 的不同属性,但没有任何效果。

从 php 加载消息的 Swift 5 代码

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 代码

$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);

 ?>

代码应该为用户显示收件箱。

【问题讨论】:

  • 检查来自您的 PHP 服务器的响应数据,将 print(data! as NSData) 放在 let json : ... 之前,然后查看打印的内容。
  • @OOPer 我输入了打印逗号,它打印出一系列数字
  • 表示"&lt;!DOCTYPE ht",可能是错误页面的第一部分。将 print 更改为 print(String(data: data!, encoding: .utf8)) 并从 HTML 中找出发生了什么样的错误。
  • GoDaddy 似乎将其作为虚假机器人页面进行了屏蔽。
  • 您是知道解决您自己问题的正确解决方案的人。请自己写答案。

标签: php ios json swift nsdictionary


【解决方案1】:

使用以下步骤解决了问题:

  1. 打印的 print(String(data: data!, encoding: .utf8))
  2. 错误消息显示我的文件被 GoDaddy 阻止
  3. 将我的页面添加到 Godaddy 安全门户的白名单中
  4. 成功了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    相关资源
    最近更新 更多