php - 从 JSON 请求中移除 DOM 标签

标签 php ios json xcode

我正在为我的 iOS 手机应用程序构建 Web 服务,但我在处理 JSON 请求时遇到了一些问题。

我发现我的 JSON PHP 页面实际上将 DOM 元素标签返回给 JSON 序列化。

示例 JSON:

<html>
<body>
<pre>
{
    "results": [
        {
            "user": {
                "firstname": "jerry",
                "lastname": "barman",
                "username": "yellowbear927",
                "street": "2507 valley view ln",
                "thumbnail": "https:\/\/randomuser.me\/api\/portraits\/thumb\/women\/84.jpg",
                "rate": "9.00"
            }
        }
    ]
}
</pre>
</body>
</html>

这是 iOS 应用程序正在读取的内容,它会导致错误。如果我从 PHP 页面中删除 DOM 元素,没有错误并且代码工作正常,但如果我需要从浏览器内部调试它,我的 JSON 看起来像垃圾。

无论如何,我可以两全其美吗?

这是我的 PHP 示例:

$dataMult = array(
    "results" => array(
        array(
            "user" => array(
                "firstname" => "jerry",
                "lastname" => "barman",
                "username" => "yellowbear927",
                "street" => "2507 valley view ln",
                "thumbnail" => "https://randomuser.me/api/portraits/thumb/women/84.jpg",
                "rate" => "9.00"
            )
        )
    )
);



?>

<html>
<body>
    <pre>
    <?php echo json_encode($dataMult, JSON_PRETTY_PRINT);?>
    </pre>
</body>
</html>

这是我的 Swift 代码:

func getHTTPRequest(urlPath: String, onCompletion: ServiceResponse) {
    let url: NSURL = NSURL(string: urlPath)!

    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithURL(url, completionHandler: {data, response, error -> Void in

        do {
            let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
            let json = JSON(jsonResult)
            onCompletion(json, error)
            let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding)
            NSLog("%@", dataString!)
        } catch let error as NSError{
            print("Something went wrong.")
            print(error.localizedDescription)
            print(error.description)
            NSLog("%@", error)
            let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding)
            NSLog("%@", dataString!)
        }

    })
    task.resume()
}

最佳答案

不可能在 JSON 文档中创建任意 DOM 元素。这样做会导致 JSON 无效。

您在评论中提供的链接 (api.randomuser.me) 定义任何 DOM 元素本身 - 而是发送一个 HTTP Content-Type header 指示浏览器内容是 JSON,不是 HTML。然后浏览器足够聪明,可以很好地格式化输出,添加一些基本的 DOM 元素并将 JSON 放在 <pre> 中。给你。

您可以通过覆盖默认 HTTP Content-Type 来调用此行为通过添加 header('Content-Type: application/json; charset=utf-8') :

header('Content-Type: application/json; charset=utf-8');

$dataMult = array(
    "results" => array(
        array(
            "user" => array(
                "firstname" => "jerry",
                "lastname" => "barman",
                "username" => "yellowbear927",
                "street" => "2507 valley view ln",
                "thumbnail" => "https://randomuser.me/api/portraits/thumb/women/84.jpg",
                "rate" => "9.00"
            )
        )
    )
);

echo json_encode($dataMult, JSON_PRETTY_PRINT);?>

有关 header() 的更多信息

关于php - 从 JSON 请求中移除 DOM 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33263780/

相关文章:

php - 如何从三四张表中随机抽取问题而不出现重复问题

php - 带有代理的php套接字

javascript - React-native SectionList 项目索引在部分之间继续

node.js - 从 JSON 文件读取并解析原始数据

javascript - 查找某个字符串是否在 json 文件中,然后获取它周围的内容

ajax - 减少从 AJAX/JSON 服务收集数据的技术

php - 通过 SSL 的非阻塞套接字连接?

javascript - javascript 中的 substr 与 $_SERVER ['REQUEST_URI' ]

ios - UITabBarController 内 UINavigationController 的 UINavigationBar 中缺少按钮的插图

ios - 在 ARKit 中检测平面