I'm trying to receive json object from request inside WKWebView
. For now I can only get html string from body, but it wrapped in some tags (like <pre>
). How I can do it not using any third part libs? And also get body directly from response?
My code demonstrate what I have now and it doesn't provide me what I need. I'm using delegate methods of WKNavigationDelegate
and evaluateJavaScript
method to get inner htmlText
of body
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")
}
}
}
Now I receive htmlStr as
"{\\"id\\":68324947,\\"is_test\\":false,\\"status\\":2,\\"status_description\\":\\"055 - Invalid transaction\\"}"
and want to get it directly as json(parse it) from
{\\"id\\":68324947,\\"is_test\\":false,\\"status\\":2,\\"status_description\\":\\"055 - Invalid transaction\\"}
also I can't use 3part libs and should make as much pure as It can be.
Use 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
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.