使用Swift 4将HTML数据转换为JSON字符串

3
我想将HTML数据解码为简单的字符串,但我得到了所有HTML语法以及。我正在使用Alamofire get方法。 HTML数据链接 http://laorotava.municipiointeligente.es/webservices/getNewsAndroid.php?type=audioguides1_es 任何帮助将不胜感激。
我已经尝试了stackoverflow上的所有代码和扩展名,但无法获得正确的结果。
 let urlString = "http://laorotava.municipiointeligente.es/webservices/getNewsAndroid.php?type=audioguides1_es"
        Alamofire.request(urlString).response { response in
            if let data = response.data{
                let str = data.html2AttributedString
                print(str)
            }
        }

我得到了带有HTML语法的字符串

我想要这段文本

欢迎来到La Orotava,这是西班牙最大的海拔差异的村庄。从Rincón海滩,海平面起伏到3718米高的Teide山,它是西班牙最高点,上次喷发是在1798年。Orotava这个名字据说源自古代guanches土著所用的Arautápala一词。征服之后,该村庄被菲利普四世国王于1648年宣布为市镇。我们邀请您通过两条不同的路线来探索La Orotava:秘密之路或蓝色路线和传奇之路或绿色路线。每条路线约需步行1.5小时,其内容各异。如果您有时间,我们建议您分开走两条路线,以享受La Orotava所提供的秘密角落、传说和秘密。沿途您会看到插入地面的金属圆形板牌,每一个指示路线颜色的轨道编号。当您面对这些牌时,请按相应的轨道号码。如果时间不够,我们建议您只选择一条路线。询问市政旅游办公室的工作人员,他们会非常乐意为您服务并根据您的兴趣帮助您选择其中之一。办公室还为您提供了小册子和其他资料,以帮助您做出决定。请注意,La Orotava充满了陡峭的上坡路和下坡路。如果您选择传奇之路或绿色路线,将会有较少的高差路段。另一方面,秘密之路或蓝色路线为冒险者们提供了从最高点观赏独特全景的机会。我们建议您在办公时间内进行路线规划,这样您就有机会尽可能多地找到开放的空间。教堂通常在礼拜时间开放。请记住,在播放器中您可以使用暂停按钮和最后10秒重播按钮,以使旅程更加舒适。无论哪条路线,都充满了惊喜和美丽的角落。向前,按下您选择的路线,我们一起进入La Orotava的漫步之旅吧。

请提供一个示例以明确您需要什么。 - Mantu
好的,我会更新。 - Meet Ios Developer
我尝试了,但没有帮助。 - Meet Ios Developer
我可能在使用错误的方法,请帮助我。 - Meet Ios Developer
以上链接将为您执行相同的操作,您将获得所需的输出。 - Mantu
@NikunjKumbhani 我认为它非常接近,但仍然存在一些问题。 - Meet Ios Developer
3个回答

4

你的答案在这里。

extension String{

    var htmlToAttributedString: NSAttributedString? {
        guard let data = data(using: .utf8) else { return NSAttributedString() }
        do {
            return try NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding:String.Encoding.utf8.rawValue], documentAttributes: nil)
        } catch {
            return NSAttributedString()
        }
    }

    var htmlToString: String {
        return htmlToAttributedString?.string ?? ""
    }
}

API 调用

let urlString = "http://laorotava.municipiointeligente.es/webservices/getNewsAndroid.php?type=audioguides1_es"

        Alamofire.request(urlString, method: .get, parameters: nil).responseJSON { response in

                do {

                    if let jsonDict = try JSONSerialization.jsonObject(with: (response.data as Data?)!, options: []) as? [String:AnyObject]{

                        if let body = jsonDict["body"] as? String{
                            print(body.htmlToString) // Your output is Here
                        }
                    }

                } catch _ {
                    print("Exception!")
                }
        }

输出结果:

这里输入图像描述


谢谢你的努力,但在我的端上出现了崩溃,我仍在努力解决。NSURLConnection完成时出现错误 - 代码-1002 - Meet Ios Developer
@MeetIosDeveloper 可参考此链接 https://dev59.com/Dl0a5IYBdhLWcg3wD1Pb#32506939 因为最近我在我的项目中写了这段代码并将其分享出来,它的工作效果很好,您也可以在此处查看输出。 - Nikunj Kumbhani
让我们在聊天中继续这个讨论 - Nikunj Kumbhani

1
你需要从HTML字符串创建NSAttributedString。
extension String {
    var htmlToAttributedString: NSAttributedString? {
        guard let data = data(using: .utf8) else { return NSAttributedString() }
        do {
            return try NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding:String.Encoding.utf8.rawValue], documentAttributes: nil)
        } catch {
            return NSAttributedString()
        }
    }
    var htmlToString: String {
        return htmlToAttributedString?.string ?? ""
    }
}

每当您想使用HTML文本时:
textView.attributedText = htmlString.htmlToAttributedString

不影响,我尝试过。 - Meet Ios Developer
请在此处粘贴您的HTML字符串。 - Hitesh Borse
我已经完成了,Nikunj Kumbhani帮助了我。 - Meet Ios Developer
由于NSAppTransportSecurity,这很好。 - Hitesh Borse

1
使用以下扩展程序处理数据和字符串。
extension Data {
    var html2AttributedString: NSAttributedString? {
        do {
            return try NSAttributedString(data: self, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil)
        } catch {
            print("error:", error)
            return  nil
        }
    }
    var html2String: String {
        return html2AttributedString?.string ?? ""
    }
}

extension String {
    var html2AttributedString: NSAttributedString? {
        return Data(utf8).html2AttributedString
    }
    var html2String: String {
        return html2AttributedString?.string ?? ""
    }
}

您的代码中的实现应该像这样。

 let urlString = "http://laorotava.municipiointeligente.es/webservices/getNewsAndroid.php?type=audioguides1_es"
        Alamofire.request(urlString).response { response in
            if let data = response.data{
                let str:NSAttributedString = data.html2AttributedString //call the extension method here
                print(str)
            }
        }

我尝试过了,但它仍然以HTML语法打印,并在将数据分配给文本视图时崩溃。 - Meet Ios Developer
尝试一下这个:let str:NSAttributedString = data.html2AttributedString - Mantu
甚至不能帮助相同的HTML语法。 - Meet Ios Developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接