我正在为我的 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/