在Swift中使用基于最新日期的JSON解码过滤数组中的字典



我有一个JSON文件,我从API拉。我能够解码我需要的JSON的正确部分,但我需要根据最新日期和另一个标准过滤最后一部分。

JSON中需要解析的部分是这样的

"tables": {
"calendars": [{
"event_id": "GH162",
"begin_date_time": "2013-01-24",
"end_date_time": "2013-01-24",
"event_type": 201,
"estimated_date_for_next_event": "1970-01-01"
}, {
"event_id": "GH182",
"begin_date_time": "2015-01-30",
"end_date_time": "2015-01-30",
"event_type": 205,
"estimated_date_for_next_event": "1970-01-01",
},

这个日历部分有大约100个字典。我需要找到一个end_date_time是最新的,并为特定的event_type。

struct EventCalendar: Codable {
let eventID: String
let beginDateTime: String
let endDateTime: Date
let eventType: Int
let estimatedDateForNextEvent: String
enum CodingKeys: String, CodingKey {
case eventID = "event_id"
case beginDateTime = "begin_date_time"
case endDateTime = "end_date_time"
case eventType = "event_type"
case estimatedDateForNextEvent = "estimated_date_for_next_event"
} }

在为JSON中的所有元素指定类型的结构中,我放入begin_date_timeend_date_time作为日期类型。原因是我认为日期输出是国际标准,并且我理解并不总是需要将其转换为日期以找到最新的日期。所以这两个日期都是一样的。

我使用的代码解析这部分(解码部分都发生在之前,我传递JSON的一部分,我需要到这个函数):

func parseArray(data: [EventCalendar]) {
let calendarData = data.first(where:{$0.eventType == 201})
//let calendarData = data.max(by: <#T##(EventCalendar, EventCalendar) throws -> Bool#>)
print(calendarData)
//no userdata
}

第一个(其中:工作得很好,并且我能够返回包含我过滤的元素的正确字典,参见下面的代码。但是,我还需要过滤日期。

Optional(Event_Alert.EventCalendar(EventID: "GH162", beginDateTime: "2013-01-24", endDateTime: 2013-01-23 23:00:00 +0000, eventType: 201, estimatedDateForNextEvent: "1970-01-01"))

我尝试使用。max(by:函数,但这不起作用,或者我没有正确填写它。我需要的是找到具有特定eventType的数组内的字典,这是最近的(所以与最新日期)有人知道什么可以工作吗?

我建议filtersort按结束日期降序排列数组,因此结果中的第一项是最新项。由于first是可选的,请安全地打开它

if let latestEntry = data.filter{$0.eventType == 201}
.sorted{$0.endDateTime > $1.endDateTime}
.first { …

相关内容

  • 没有找到相关文章