Как отобразить определенные части ответа массива JSON на запрос Alamofire - PullRequest
0 голосов
/ 12 января 2019

Как получить доступ к массиву JSON для отображения вывода «AdjustedScheduleTime» из раздела «Поездка»?

У меня это работает для StopLabel, как показано ниже, но я изо всех сил пытаюсь получить доступ к AdjustedScheduleTime.

Я попробовал следующее:

[ "GetNextTripsForStopResponse"] [ "GetNextTripsForStopResult"] [ "Route"] [ "RouteDirection"] [ "Путешествие"] [ "Trip"] [ "AdjustedScheduleTime"]

но не работает.

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.


    let parameters = [
        "appID": "5rt5rydg",                 //incorrect appID
        "apiKey": "3b5fb15rdgy5454hdrfhr",  //incorrect apiKey
        "routeNo": "14",
        "stopNo": "8600",
        "format": "JSON"
    ]
    AF.request("https://api.octranspo1.com/v1.2/GetNextTripsForStop?", method: .post, parameters: parameters,encoding:
        URLEncoding.httpBody, headers: nil).responseJSON{ response in

            let swiftyJsonVar = JSON(response.result.value!)
            print(swiftyJsonVar)


            if let busInfo = swiftyJsonVar["GetNextTripsForStopResult"]["StopLabel"].string {

                print(": ",busInfo)


                print("Label1: ", self.label1.text = busInfo)
            }






            }


        }

Вот результаты:

{
  "GetNextTripsForStopResult" : {
    "Error" : "",
    "Route" : {
      "RouteDirection" : {
        "RouteLabel" : "St-Laurent",
        "Error" : "",
        "RequestProcessingTime" : "20190112151425",
        "Trips" : {
          "Trip" : [
            {
              "AdjustmentAge" : "0.38",
              "GPSSpeed" : "0.5",
              "Latitude" : "45.429457",
              "Longitude" : "-75.684117",
              "TripDestination" : "St-Laurent",
              "LastTripOfSchedule" : false,
              "TripStartTime" : "14:31",
              "BusType" : "4LB - IN",
              "AdjustedScheduleTime" : "11"
            },
            {
              "AdjustmentAge" : "4.32",
              "GPSSpeed" : "0.5",
              "Latitude" : "45.413749",
              "Longitude" : "-75.689748",
              "TripDestination" : "St-Laurent",
              "LastTripOfSchedule" : false,
              "TripStartTime" : "14:46",
              "BusType" : "4LB - IN",
              "AdjustedScheduleTime" : "22"
            },
            {
              "AdjustmentAge" : "0.55",
              "GPSSpeed" : "31.3",
              "Latitude" : "45.399587",
              "Longitude" : "-75.727631",
              "TripDestination" : "St-Laurent",
              "LastTripOfSchedule" : false,
              "TripStartTime" : "15:01",
              "BusType" : "4L - IN",
              "AdjustedScheduleTime" : "37"
            }
          ]
        },
        "RouteNo" : 14,
        "Direction" : "Eastbound"
      }
    },
    "StopLabel" : "MCARTHUR \/ IRWIN MILLER",
    "StopNo" : "8600"
  }
}

: MCARTHUR / IRWIN MILLER // Это желаемый вывод для StopLabel

1 Ответ

0 голосов
/ 13 января 2019

Хорошо, вы объясните JSON. Вот выстрел.

Сначала некоторые правила:

  • Когда вы видите открытие {, это означает, словарь, вы должны выбрать следующий ключ
  • Когда вы видите открытие [, это означает массив. Вы должны выбрать индекс
  • Когда вы видите "SomeString":, это ключ в массиве.
  • У словарей есть ключи, у массивов есть индекс. Выберите соответственно ..

Итак, когда мы проходим этот ответ:

  1. Мы видим, что мы начинаем с {. У нас есть словарь! Мы ожидаем увидеть несколько ключей дальше.
  2. Итак, давайте выберем ключ: у нас есть только один, и это "GetNextTripsForStopResult". пока что имеем: swiftyJsonVar["GetNextTripsForStopResult"]
  3. Теперь посмотрим на содержимое «GetNextTripsForStopResult». Мы видим, что это также словарь. Снова у нас должны быть некоторые ключи. Мы делаем. У нас есть Error, Route, StopLabel и более. Давайте выберем ключ. Поскольку мы пытаемся добраться до «AdjustedScheduleTime», давайте выберем Route. пока у нас есть ["GetNextTripsForStopResult"]["Route"]
  4. Теперь давайте посмотрим на содержимое Route. Это словарь снова.
  5. Снова мы выбираем ключ и повторяем, пока не нажмем Trip. Вы должны иметь ["GetNextTripsForStopResult"]["Route"]["RouteDirection"]["Trips"]["Trip"]
  6. Давайте посмотрим, что мы имеем в Trip Что это? .. это массив!
  7. Мы должны выбрать индекс сейчас. Нам нужно как-то выбрать. Это сложная часть. Для этого нам нужно больше информации. Так что давайте просто ARBITRARILY выбрал один. Давайте возьмем последний. итак имеем: ["GetNextTripsForStopResult"]["Route"]["RouteDirection"]["Trips"]["Trip"][2]
  8. Теперь мы можем получить наш окончательный ключ AdjustedScheduleTime. Итак, давайте выберем это! ["GetNextTripsForStopResult"]["Route"]["RouteDirection"]["Trips"]["Trip"][2]["AdjustedScheduleTime"]

Имейте в виду:

Эти жестко закодированные индексы почти НИКОГДА того, что вы хотите. Возможно, вам нужно показать все AdjustedScheduleTime пользователю или позволить пользователю выбрать один из них, или добавить их все. Это действительно зависит от вашего приложения и того, что вы пытаетесь достичь. Я выбрал последний индекс (2) произвольно, не зная вашего приложения, API-интерфейс, который вы вызываете, и того, чего вы пытаетесь достичь. ОЧЕНЬ возможно, что вам не нужен последний индекс.

...