无效的 JSON 需要 Swift iOS

Posted

技术标签:

【中文标题】无效的 JSON 需要 Swift iOS【英文标题】:Invalid JSON require Swift iOS 【发布时间】:2016-07-15 09:51:27 【问题描述】:

我正在开发一个简单的iosSwift 应用程序。我想为我的应用程序制作一个登录屏幕,该屏幕将连接到Wordpress 中已经存在的用户数据库。我发现了一些php 脚本和Swift 代码。

我正在尝试发布用户名和登录名,检查并返回结果(isUser = true/false or 1/0)

这是一个 PHP 脚本

<?php
// Read request parameters
$username= $_REQUEST["username"];
$password = $_REQUEST["password"];
// Store values in an array
$returnValue = array("username"=>$username, "password"=>$password);
// Send back request in JSON format
echo json_encode($returnValue);
?>

还有一个 Swift 函数

func getPHPJson() 

    let urlPath: String = "LINK_TO_PHP_FILE?username=\(user)&password=\(pass)"
    let url: NSURL = NSURL(string: urlPath)!
    let request1: NSMutableURLRequest = NSMutableURLRequest(URL: url)

    request1.HTTPMethod = "GET"
    let queue:NSOperationQueue = NSOperationQueue()

    NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler: (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in

    do 
    
        if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary 
        
            print(jsonResult)
            //print(jsonResult["isUser"] as! Bool)
            let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
            print("raw response: \(responseString!)")
        
     catch let error as NSError 
    
        print(error.localizedDescription)
        print("error")
        let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
        print("raw response: \(responseString)")
    
    )

它给了我想要的结果。

输出


    password = iosappusettest1;
    username = iosappusettest;

raw response: "username":"iosappusettest","password":"iosappusettest1"

但是当我添加检查用户是否注册的功能时 - 我总是得到一个 invalid JSON

这里是 PHP 函数

function authentication ($user, $pass)
  global $wp, $wp_rewrite, $wp_the_query, $wp_query;

  if(empty($user) || empty($pass))
    return 0;
   else 
    require_once('../wp-blog-header.php');
    $status = 0;
    $auth = wp_authenticate($user, $pass );
    if( is_wp_error($auth) )       
      $status = 0;
     else 
      $status = 1;
    
    return $status;
   

我相信问题出在require_once 函数上。在原始响应中,我得到了很多 html 标签和其他数据,这些数据使我的 JSON 无效。

有什么方法可以清除页面并只在JSON 中输出? PHP 中的echo "&lt;script&gt; document.documentElement.innerHTML = ''; &lt;/script&gt;"; 对我没有帮助。也许 jQuery 会有所帮助? 也许我可以检查用户是否以其他方式注册? 也许我可以将结果存储在单独的位置或临时文件中? 也许我不应该用 JSON 来包装我的数据,而是用别的东西?

所以我需要将用户名和密码传递给 PHP,使用身份验证函数(使用 require_once)检查它并将 $status 发送回iOS Swift app ass 变量。

问题已回答。 问题出在 WP 插件中,它将所有未登录用户从该域中的所有链接重定向,所以当我调用 require_once('../wp-blog-header.php'); 时,我总是被重定向到主页,这就是带有所有 HTML 标记的错误 JSON 文件的原因。

【问题讨论】:

【参考方案1】:

将您的响应保留为纯 JSON,并省略任何 html 标记,因为您的 ios 端不需要它们。

【讨论】:

很高兴,但我不能。问题是当我添加身份验证功能(使用 require_once)时 - 我总是得到无效的 JSON 和 html 标签。 我不懂php,但我认为你的无效JSON只是一个0?您的第一个 php sn-p 正确返回 json。您可以尝试在您的身份验证方法中返回类似的内容。 问题是你的 php 代码没有返回正确的 JSON。 我又检查了一次。仍然得到错误。 *无法读取数据,因为它的格式不正确。*在 php 文件中的 require_once 之后,我得到了很多不同的标签,如 等等.. 在 php 中找到一些处理 json 的有用库。

以上是关于无效的 JSON 需要 Swift iOS的主要内容,如果未能解决你的问题,请参考以下文章

Swift - JSONSerialization 无效的 JSON

Swift - JSONSerialization 无效的 JSON

Swift - JSON 写入中的***类型无效

JSON 解析 --> Swift | JSON 写入中的***类型无效

JSON写入Swift 4中的***类型无效

Swift 中 JSON 写入(NSConcreteMutableData)中的类型无效