2016-09-13 14 views
11

Używam Alamofire jako biblioteki HTTP, od aktualizacji do Swift 3, jak analizować JSON na podstawie poniższego przykładu?Parsowanie JSON przy użyciu nowych Swift 3 i Alamofire

Alamofire.request("https://httpbin.org/get").responseJSON { response in 
    debugPrint(response) 

    if let json = response.result.value { 
     print("JSON: \(json)") 
    } 
} 

respone.result.value jest dowolnego obiektu i jest bardzo nowy i mylący.

+1

Czy to nie jest duplikat http://stackoverflow.com/questions/35447161/need-help-parsing-json-with-swift-using-alamofire?rq=1? –

+1

@MartinDelille to jest to samo, ale myślę, że nadal używa Swift 2, jest wiele przełomowych zmian i SwiftyJSOn nie został jeszcze uaktualniony do najnowszego Swift 3 –

+0

@LawGimenez Zobacz aktualizację do korzystania z SwiftyJSON z Swift 3. – mixel

Odpowiedz

18

Jak widać w Alamofire tests oddasz response.result.value do [String:Any]:

if let json = response.result.value as? [String: Any] { 
    // ... 
} 
+0

Dzięki! Przyjrzę się temu, zaakceptuję tę odpowiedź, gdy ją potwierdzę. –

+0

Tak Próbowałem dodać tę kapsułę i jeszcze nie działa, mam wiele błędów kompilacji od wczoraj. –

+0

Czy zaktualizowałeś swoją aplikację do Swift 3? Niemniej moja odpowiedź powinna ci pomóc. – mixel

2

Jeśli nie chcesz używać SwiftyJson zrobić z Alamofire 4.0:

Alamofire.request("https://httpbin.org/get").responseString { response in 
    debugPrint(response) 

    if let json = response.result.value { 
     print("JSON: \(json)") 
    } 
} 

Kluczową kwestią bytu użyj responseString zamiast responseJSON.

Źródło: https://github.com/Alamofire/Alamofire#response-string-handler

+0

Nie potrzebujesz SwiftyJSON, aby użyć 'responseJSON'. – mixel

+0

@mixel yeah Wiem. "ResponseJSON" dawał mi problemy w szybkim 3 + alamofire 4.0, ale gdy aktualizowałem moją aplikację. Zmiana na 'responseString' pomogła mi rozwiązać problem bez konieczności zmiany czegokolwiek innego. – Micro

3

Aktualizacja dla szybkiej 3:

jeśli odpowiedź jest jak poniżej,

[ 
    { 
     "uId": 1156, 
     "firstName": "Kunal", 
     "lastName": "jadhav", 
     "email": "[email protected]", 
     "mobile": "7612345631", 
     "subuserid": 4, 
     "balance": 0 
    } 
] 

** jeśli chcesz analizowania odpowiedzi powyżej JSON używany poniżej prostych linii kodu: **

Alamofire.request(yourURLString, method: .get, encoding: JSONEncoding.default) 
     .responseJSON { response in 
      debugPrint(response) 

      if let data = response.result.value{ 

       if (data as? [[String : AnyObject]]) != nil{ 

        if let dictionaryArray = data as? Array<Dictionary<String, AnyObject?>> { 
         if dictionaryArray.count > 0 { 

          for i in 0..<dictionaryArray.count{ 

           let Object = dictionaryArray[i] 
           if let email = Object["email"] as? String{ 
            print("Email: \(email)") 
           } 
           if let uId = Object["uId"] as? Int{ 
            print("User Id: \(uId)") 
           } 
           // like that you can do for remaining... 
          } 
         } 
        } 
       } 
      } 
      else { 
       let error = (response.result.value as? [[String : AnyObject]]) 
       print(error as Any) 
      } 
    }