Swift - problem z wyciągnięciem konkretnych danych z JSON-a

Swift - problem z wyciągnięciem konkretnych danych z JSON-a
Paweł Ada
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad rok
  • Postów:52
0

Witam.
Obecnie buduje aplikacji na ios i ma problem z wyciągnięciem konkretnych danych z JSON , próbowałem już wiele wersji i przeglądałem już wiele poradników/postów itp ale nie znalazłem rozwiązania (Mimo ze dla mnie wydaje się ze dane są zwracane dość prosty sposób , ale jestem nowy nie znam się ;) )
Oto mój kod w swift

Kopiuj
 let url = URL(string: "http://81.352.025.214:7342/api/sprzedarz")

        let task = URLSession.shared.dataTask(with: url!) { (data,response, error) in

            if error != nil

            {

                print("ERROR NR 1")

            }

            else {

                if let content = data

                {

                    do

                    {

                        print("Start")

                        //lista

                        let myJSON = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject

                        print(myJSON)

                        if let symbol = myJSON["symbol"] as? NSDictionary

                        {

                            print(symbol)

                        }

                    }

                    catch{

                        print("Bład NR 2")

                    }

                }

            }

        }

        task.resume()

    }


Jak wyciągam całego jsona nie problemu ale jak chce konkretne dane w tym przypadku " symbol " to wraca mi nic :(
i nie wiem dlaczego próbowałem rożnych sposobów .
JSON :

Kopiuj
[
    {
        "symbol": "abc",
        "ilosc": 20
    },
    {
        "symbol": "XZY",
        "ilosc": 25
    }
]

Mozę ktoś ma pomysł co robię źle ?

HE
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Kraków
  • Postów:269
0

Podstawy debugowania się kłaniają. Zapnij się w linijce "let myJSON = try..." i sprawdź jakiego typu jest efekt serializacji zamiast zakładać że to "AnyObject".
PS. zrzynając z poradników warto sprawdzać jakiej wersji języka w którym chcesz pisać dotyczą.

0

Niestety @up mylisz się, AndroidStudio posiada wbudowany debuger.

Kot Sylwester
Kot Sylwester
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:13
0

Krzywy Wąż - raczej się nie myli, zakładając że OP nie pisze apki na iOS-a w Android Studio.

Co do pytania, to nie jestem pewien, ale chyba powinno być tak: let myJSON = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as? [String: Any]

Więcej informacji: Working with JSON in Swift

edytowany 1x, ostatnio: Kot Sylwester
Paweł Ada
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad rok
  • Postów:52
0

**Rozwiązanie problemu : **

Kopiuj
  func Connect() {

        let url =  "http://ipjakies:jakiisport/api/Sprzedarz"
        let UrlObj = URL(string: url)
        URLSession.shared.dataTask(with: UrlObj!){(data,response,error)in
            do{
                var Towary = try JSONDecoder().decode([towar].self , from: data!)
                for towar in Towary{
                 print(towar.symbol!)
                  print(towar.ilosc!)
                }
            }catch{
                print("we have the fucking error")
            }
        }.resume(
    }

Trzeba jeszcze tworzyć jakiś obiekt który wracał zmienne umie jest to obiekt towar

Kopiuj
       let symbol : String?
       let ilosc : Double?

   }
edytowany 1x, ostatnio: Paweł Ada
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:mniej niż minuta
0

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.