Ios 如何正确解析来自2个URL的JSON?

Ios 如何正确解析来自2个URL的JSON?,ios,json,swift,parsing,Ios,Json,Swift,Parsing,我需要从两个不同的URL解析JSON let jsonUrlStr1 = "https://123" let jsonUrlStr2 = "https://325" guard let url1 = URL(string: jsonUrlStr1) else { return } guard let url2 = URL(string: jsonUrlStr2) else { return } 这里我正在运行第一个url的会话: URLSession.shared.dataTask(

我需要从两个不同的URL解析JSON

let jsonUrlStr1 = "https://123"
let jsonUrlStr2 = "https://325"

guard let url1 = URL(string: jsonUrlStr1) else { return }
guard let url2 = URL(string: jsonUrlStr2) else { return }
这里我正在运行第一个url的会话:

    URLSession.shared.dataTask(with: url1) { (data, response, err) in

        if err != nil {
            print("Error:\(String(describing: err))")
        }

        guard let data = data else { return }

        do {

      let myData1 = try JSONDecoder().decode(SomeJsonModel1.self, from: data)

            //Some code

        } catch let jsonErr {
            print("Error:\(jsonErr)")
        }

        }.resume()//URLSession
然后,我再次为第二个url运行另一个会话,使用相同的方式:

URLSession.shared.dataTask(with: url2) { (data, response, err) in

    if err != nil {
        print("Error:\(String(describing: err))")
    }

    guard let data = data else { return }

    do {

  let myData2 = try JSONDecoder().decode(SomeJsonModel2.self, from: data)

        //Some code

    } catch let jsonErr {
        print("Error:\(jsonErr)")
    }

    }.resume()//URLSession
这段代码有效,我得到了结果。 但是我认为应该有一种更正确的方法来解析2个URL。
请告知如何正确操作。谢谢。

您可以像这样尝试使用完成块:

func getDataFromJson(url: String, completion: @escaping (_ success: [String : Any]) -> Void) {
        let request = URLRequest(url: URL(string: url)!)
        let task = URLSession.shared.dataTask(with: request) { Data, response, error in

            guard let data = Data, error == nil else {  // check for fundamental networking error

                print("error=\(String(describing: error))")
                return
            }

            if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {  // check for http errors

                print("statusCode should be 200, but is \(httpStatus.statusCode)")
                print(response!)
                return

            }

            let responseJSON  = try! JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String : Any]
            completion(responseJSON)
        }
        task.resume()
    }
    let jsonUrlStr1 = "https://123"
    let jsonUrlStr2 = "https://325"

    getDataFromJson(url: jsonUrlStr1, completion: { response in
       print("JSON response for url1 :: ",response) // once jsonUrlStr1 get it's response call next API 

       getDataFromJson(url: jsonUrlStr2, completion: { response in
           print("JSON response for url2 :: ",response)
       })

    })
并调用如下方法:

func getDataFromJson(url: String, completion: @escaping (_ success: [String : Any]) -> Void) {
        let request = URLRequest(url: URL(string: url)!)
        let task = URLSession.shared.dataTask(with: request) { Data, response, error in

            guard let data = Data, error == nil else {  // check for fundamental networking error

                print("error=\(String(describing: error))")
                return
            }

            if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {  // check for http errors

                print("statusCode should be 200, but is \(httpStatus.statusCode)")
                print(response!)
                return

            }

            let responseJSON  = try! JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String : Any]
            completion(responseJSON)
        }
        task.resume()
    }
    let jsonUrlStr1 = "https://123"
    let jsonUrlStr2 = "https://325"

    getDataFromJson(url: jsonUrlStr1, completion: { response in
       print("JSON response for url1 :: ",response) // once jsonUrlStr1 get it's response call next API 

       getDataFromJson(url: jsonUrlStr2, completion: { response in
           print("JSON response for url2 :: ",response)
       })

    })

您可以尝试使用完成块,如下所示:

func getDataFromJson(url: String, completion: @escaping (_ success: [String : Any]) -> Void) {
        let request = URLRequest(url: URL(string: url)!)
        let task = URLSession.shared.dataTask(with: request) { Data, response, error in

            guard let data = Data, error == nil else {  // check for fundamental networking error

                print("error=\(String(describing: error))")
                return
            }

            if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {  // check for http errors

                print("statusCode should be 200, but is \(httpStatus.statusCode)")
                print(response!)
                return

            }

            let responseJSON  = try! JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String : Any]
            completion(responseJSON)
        }
        task.resume()
    }
    let jsonUrlStr1 = "https://123"
    let jsonUrlStr2 = "https://325"

    getDataFromJson(url: jsonUrlStr1, completion: { response in
       print("JSON response for url1 :: ",response) // once jsonUrlStr1 get it's response call next API 

       getDataFromJson(url: jsonUrlStr2, completion: { response in
           print("JSON response for url2 :: ",response)
       })

    })
并调用如下方法:

func getDataFromJson(url: String, completion: @escaping (_ success: [String : Any]) -> Void) {
        let request = URLRequest(url: URL(string: url)!)
        let task = URLSession.shared.dataTask(with: request) { Data, response, error in

            guard let data = Data, error == nil else {  // check for fundamental networking error

                print("error=\(String(describing: error))")
                return
            }

            if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {  // check for http errors

                print("statusCode should be 200, but is \(httpStatus.statusCode)")
                print(response!)
                return

            }

            let responseJSON  = try! JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String : Any]
            completion(responseJSON)
        }
        task.resume()
    }
    let jsonUrlStr1 = "https://123"
    let jsonUrlStr2 = "https://325"

    getDataFromJson(url: jsonUrlStr1, completion: { response in
       print("JSON response for url1 :: ",response) // once jsonUrlStr1 get it's response call next API 

       getDataFromJson(url: jsonUrlStr2, completion: { response in
           print("JSON response for url2 :: ",response)
       })

    })