我正在尝试从WKWebView
内部的请求接收json对象。目前,我只能从正文中获取html字符串,但它包装在某些标签中(例如<pre>
)。我怎么不使用任何第三方库呢?还能直接从响应中获取尸体吗?
我的代码演示了我现在拥有的东西,但没有提供我所需要的东西。我正在使用WKNavigationDelegate
和evaluateJavaScript
方法的委托方法来获取主体的内部htmlText
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!){
webView.evaluateJavaScript("document.body.innerHTML") { (anyObject, error) in
guard let htmlStr = anyObject as? String else {
return
}
let data: Data = htmlStr.data(using: .utf8)!
do {
let jsObj = try JSONSerialization.jsonObject(with: data, options: .init(rawValue: 0))
if let jsonObjDict = jsObj as? Dictionary<String, Any> {
let threeDSResponse = ThreeDSResponse(dict: jsonObjDict)
print(threeDSResponse)
}
} catch _ {
print("having trouble converting it to a dictionary")
}
}
}
现在我收到htmlStr作为
“ {\” id \“:68324947,\” is_test \“:false,\” status \“:2,\” status_description \“:\” 055 -无效的交易\“}”
并想直接从
获取为json(解析){\“ id \”:68324947,\“ is_test \”:false,\“ status \”:2,\“ status_description \”:\“ 055 -无效的交易\“}
我也不能使用3part库,它应该尽可能地纯净。
答案 0 :(得分:0)
使用JSONDecoder
do {
let dec = JSONDecoder()
dec.keyDecodingStrategy = .convertFromSnakeCase
let res = try dec.decode(Root.self, from:Data(htmlStr.utf8))
print(res)
} catch {
print("having trouble converting it to a dictionary" , error)
}
struct Root : Codable {
let id,status:Int
let isTest:Bool
let statusDescription:String
}