2017-07-12 7 views
0

Hy everyone。私はAPIで動作するアプリを開発中です。 "Id"が1000に等しい "Name"を取得しようとしています。名前を印刷すると、String値 "Todd"が返されます。 誰でも私を助けることができますか?これは私のJSONレスポンスです。Swiftで行が変数と等しいJSONオブジェクトを取得する方法

enter image description here

そして、これは私のコードです。

func apiRequestCompani(){ 
    for index in companyId { 
     let config = URLSessionConfiguration.default 
     let username = "F44C3FC2-91AF-5FB2-8B3F-70397C0D447D" 
     let password = "[email protected]#" 
     let loginString = String(format: "%@:%@", username, password) 
     let userPasswordData = loginString.data(using: String.Encoding.utf8) 
     let base64EncodedCredential = userPasswordData?.base64EncodedString() 
     let authString = "Basic " + (base64EncodedCredential)! 
     print(authString) 
     config.httpAdditionalHeaders = ["Authorization" : authString] 
     let session = URLSession(configuration: config) 

     let urlProjects = NSURL(string: "https://start.jamespro.nl/v4/api/json/company/"+index+"/?limit=10") 
     let task = session.dataTask(with: urlProjects! as URL) { 
      (data, response, error) in 
      if let taskHeader = response as? HTTPURLResponse { 
       print(taskHeader.statusCode) 
      } 
      if error != nil { 
       print("There is an error!!!") 
       print(error) 
      } else { 
       if let content = data { 
        do { 
         let dictionary = try JSONSerialization.jsonObject(with: content) as! [String:Any] 
         print(dictionary) 

         if let items = dictionary["items"] as? AnyObject { 
          if let klantId = items["Id"] as? String { 
           if klantId == "1000" { 
            //print(klantId) 
           } 
          } 


          if let name = items["Name"] as? String { 
            self.companyName.append(name) 
            //print(self.companyName) 
          } 
         } 

        } 
        catch { 
         print("Error: Could not get any data") 
        } 
       } 
      } 
     } 

     task.resume() 
     //print(urlProjects) 
    } 
} 
+4

コピー/貼り付けコードとデータではなく、スクリーンショットを試すことができます。あなたのコードはどこに行きますか?テストに合格すればどうなるでしょうか? klandIdは本当に文字列ですか?またはInt? – Larme

+0

印刷すると何が得られますか?(明細["名前"])? @Larmeが言ったように、あなたのコードを貼り付けます。 –

+0

@JD。アイテム["名前"]を印刷すると、文字列値が取得されます。そして、私のコードを貼り付けた反応に感謝:) –

答えて

0

私はあなたがこのような何かを行うことができると思う、上記のコードを試してみてください

var dict: [AnyHashable: Any]? = (response.responseDict()["items"] as? [AnyHashable: Any]) 
if (dict?.value(forKey: "BranchId") == "1000") { 
    var name: String? = (dict?.value(forKey: "Name") as? String) 
} 

してください。

希望すると、これが役立ちます。

0

あなたは以下のコードで

let companyIds = ["1000", "1001"] 
var companyName = [String]() 
override func viewDidLoad() { 
     super.viewDidLoad() 
    self.apiRequestCompani { (names) in 
      self.companyName = names // companyName contains all names where id == 1000 
      print("companyName === \(self.companyName)") 
    } 
} 

func apiRequestCompani(completion: @escaping ([String]) ->()) { 
    var names = [String]() 
    var resCount = 0 
    for companyId in companyIds { 
     let config = URLSessionConfiguration.default 
     let username = "F44C3FC2-91AF-5FB2-8B3F-70397C0D447D" 
     let password = "[email protected]#" 
     let loginString = String(format: "%@:%@", username, password) 
     let userPasswordData = loginString.data(using: String.Encoding.utf8) 
     let base64EncodedCredential = userPasswordData?.base64EncodedString() 
     let authString = "Basic " + (base64EncodedCredential)! 
     config.httpAdditionalHeaders = ["Authorization" : authString] 
     let session = URLSession(configuration: config) 
     let urlProjects = NSURL(string: "https://start.jamespro.nl/v4/api/json/company/"+companyId+"/?limit=10") 
     let task = session.dataTask(with: urlProjects! as URL) { 
       (data, response, error) in 
       if let taskHeader = response as? HTTPURLResponse { 
        print(taskHeader.statusCode) 
       } 
       if error != nil { 
        print("There is an error!!!") 
        print(error ?? "") 
       } else { 
        if let content = data { 
         do { 
          let dictionary = try JSONSerialization.jsonObject(with: content) as! [String:Any] 
          if let items = dictionary["items"] as? AnyObject { 
           if let klantId = items["Id"] as? String, klantId == "1000" { 
            if let name = items["Name"] as? String { 
              print("NAME === \(name)") 
              names.append(name) 
            } 
           } 
          } 

         } 
         catch { 
          print("Error: Could not get any data") 
         } 
        } 
       } 
       resCount = resCount + 1 
       if self.companyIds.count == resCount { 
        completion(names) 
       } 
      } 

      task.resume() 
      //print(urlProjects) 
    } 
} 
関連する問題