如何显示来自 Alamofire 请求的 JSON 数组响应的某些部分

Posted

技术标签:

【中文标题】如何显示来自 Alamofire 请求的 JSON 数组响应的某些部分【英文标题】:How do I display certain parts of JSON array response from Alamofire request 【发布时间】:2019-01-12 20:20:49 【问题描述】:

如何访问 JSON 数组以显示 Trip 部分的“AdjustedScheduleTime”的输出?

如下所示,我让它适用于 StopLabel,但我很难访问 AdjustedScheduleTime。

我尝试了以下方法:

["GetNextTripsForStopResponse"]["GetNextTripsForStopResult"]["Route"]["RouteDirection"]["Trips"]["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 所需的输出

【问题讨论】:

您能否格式化您的代码以便我们阅读? Trip 的值是一个包含 3 个项目的数组(注意 []),所以有三个 AdjustedScheduleTime 值。 【参考方案1】:

好的,你也解释一下 JSON。这是一个镜头。

首先是一些规则:

当您看到打开 时,它表示字典,接下来您必须选择一个键 当您看到打开 [ 时,它表示数组。你必须选择一个索引 当您看到"SomeString": 时,它是数组中的一个键。 字典有键,数组有索引。相应地选择..

所以当我们遍历这个响应时:

    我们看到我们以 开头。我们有字典!我们预计接下来会看到一些键。 所以让我们选择一个键:我们只有一个,它是"GetNextTripsForStopResult"。到目前为止,我们有:swiftyJsonVar["GetNextTripsForStopResult"] 我们现在看看“GetNextTripsForStopResult”的内容。我们看到它也是一本字典。同样,我们应该有一些键。我们的确是。我们有ErrorRouteStopLabel 等等。让我们选择一把钥匙。由于我们试图达到“AdjustedScheduleTime”,所以让我们选择Route。到目前为止,我们有["GetNextTripsForStopResult"]["Route"] 现在让我们看看Route 的内容。它又是一本字典。 我们再次选择一个键并不断重复,直到我们点击Trip。你应该有["GetNextTripsForStopResult"]["Route"]["RouteDirection"]["Trips"]["Trip"] 让我们看看Trip 中的内容这是什么?..它是一个数组! 我们现在必须选择一个索引。我们需要以某种方式选择。那是棘手的部分。为此,我们需要更多信息。所以让我们任意选择一个。让我们拿最后一个。所以我们有:["GetNextTripsForStopResult"]["Route"]["RouteDirection"]["Trips"]["Trip"][2] 现在我们可以获得最终密钥AdjustedScheduleTime。所以让我们选择它! ["GetNextTripsForStopResult"]["Route"]["RouteDirection"]["Trips"]["Trip"][2]["AdjustedScheduleTime"]

记住:

这些硬编码的索引几乎是绝不你想要的。也许您需要向用户显示所有AdjustedScheduleTime,或者让用户选择一个,或者将它们全部加起来。这实际上取决于您的应用程序以及您要完成的工作。我在不了解您的应用程序、您正在调用的 api 以及您想要实现的目标的情况下任意选择了最后一个索引 (2)。您很可能不想要最后一个索引。

【讨论】:

以上是关于如何显示来自 Alamofire 请求的 JSON 数组响应的某些部分的主要内容,如果未能解决你的问题,请参考以下文章

如何使用来自 Alamofire 的 JSON 数据填充 tableview?

无法将来自 Alamofire GET 请求的 JSON 数据保存到函数的局部变量

如何使用 Alamofire 请求在我的 tableView 中显示我的数据

遍历来自 Alamofire 的 JSON 响应

来自 JSON Api 的 Swift 请求数据

使用 Alamofire 解码 json 时出错