繁体   English   中英

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

[英]Parse json object from response inside WKWebView (Swift, iOS)

我正在尝试从WKWebView请求接收 json 对象。 现在我只能从 body 获取 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(parse it) 中获取它

{\\"id\\":68324947,\\"is_test\\":false,\\"status\\":2,\\"status_description\\":\\"055 - 无效交易\\"}

我也不能使用 3part 库,应该尽可能地纯。

使用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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM