Jako swift nowicjusz, jestem bardzo zdezorientowany, jak przewidzieć niektóre dane JSON uzyskane z API. Jestem w stanie uzyskać dane JSON z interfejsu API za pomocą żądania alamofire. W tym momencie myślę, że mam obiekt NSDictionary, JSON jako Drukuj (JSON) loguje się do konsoli o wiele JSON.

if let result = response.result.value {
                            let JSON = result as! NSDictionary
                           print("this is what JSON is")
                            print(JSON)

Moje pytanie brzmi, po pierwsze, jest JSON w rzeczywistości NSDictionary. Po drugie, jak miałbym uzyskać do wartości w JSON. Czy muszę najpierw przekonwertować to do obiektu danych. Lub jak dostać się na zagnieżdżone dane.

Na przykład, powiedzmy, że JSON wygląda tak:

 {
   "contact": {
   "first": "Bob",
   "second":"Jones"
    }
 }

Natknąłem się na ten kod, więc:

 let data = JSON(data: JSON)
 print("data\(data["contact"]["first"])")

Ale rzuca błąd. Mam zainstalowany Swiftyjson, ale szczęśliwy w przypadku rozwiązania lub bez niego.

Z góry dziękuję za wszelkie sugestie

1
user6631314 1 czerwiec 2018, 23:14

3 odpowiedzi

Najlepsza odpowiedź

Możesz spróbować

if let result = response.result.value as? [String:Any] {
   if let contact = result["contact"] as? [String:Any] {
      if let first = contact["first"] as?  String {
           print(first)
     }
   }
}

Także to

let data = JSON(data: JSON)

Daje błąd, ponieważ parametr powinien być typu Data nie Dictionary

Wolałbym zwrócić dane z alamofire żądania i użyj Decodable, aby przeanalizować go i przekonwertować w wymagany model

1
Sh_Khan 1 czerwiec 2018, 20:26

SPRÓBUJ TEGO!

     if let data = response.data {
            let jsonData = JSON(data: data)
            print("data : \(jsonData["contact"]["first"].string)")
        }
1
Harsh 1 czerwiec 2018, 20:25

Swift4 wprowadza niesamowity protokół kodowy.

Korzystając z Codable, możemy modelować plik JSONOBECT lub właściwości listy nieruchomości na równoważne struktury lub klas, pisząc bardzo kilka linii kodu.

Istnieje wiele dostępnych narzędzi online, które tworzy klasę modelową od Ciebie JSON (http://www.json4swift.com/)

Przykład

  let decoder = JSONDecoder()
  let parsedObject = try decoder.decode(Class.self, from: data) 

Szczegóły można znaleźć poniżej linku: https://developer.apple.com/documentation/Foundation/archives_and_serialization/ending_and_decoding_Custom_typesa 2/a >.

0
Hiren 2 czerwiec 2018, 14:15