从WKWebView内部的响应中解析json对象(Swift,iOS)

时间:2019-06-25 14:01:07

标签: ios swift wkwebview

我正在尝试从WKWebView内部的请求接收json对象。目前,我只能从正文中获取html字符串,但它包装在某些标签中(例如<pre>)。我怎么不使用任何第三方库呢?还能直接从响应中获取尸体吗?

我的代码演示了我现在拥有的东西,但没有提供我所需要的东西。我正在使用WKNavigationDelegateevaluateJavaScript方法的委托方法来获取主体的内部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库,它应该尽可能地纯净。

1 个答案:

答案 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
}