如何显示来自 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”的内容。我们看到它也是一本字典。同样,我们应该有一些键。我们的确是。我们有Error
、Route
、StopLabel
等等。让我们选择一把钥匙。由于我们试图达到“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 数据保存到函数的局部变量