Я использую Microsoft Graph API, в частности API FindMeetingTimes.Что можно увидеть здесь: https://docs.microsoft.com/en-us/graph/api/user-findmeetingtimes?view=graph-rest-1.0
Я использую Swift для разработки этого.Мой JSON-объект работает, и публикация успешна, но мне просто интересно, каков будет лучший / наиболее эффективный способ изменить этот код, чтобы он вырезал повторяющийся код - в частности, добавление местоположений в JSON.Список местоположений может быть очень большим, поэтому я хотел бы перебрать массив местоположений и добавить их в объект JSON.
Мой метод выглядит следующим образом:
static func setupJsonObjectForFindMeetingTimeAllRooms(nameOfRoom: String, roomEmailAddress: String, dateStartString: String, dateEndString: String, durationOfMeeting: String) -> [String: Any] {
let jsonObj : [String: Any] =
[
"attendees": [
[
"type": "required",
"emailAddress": [
"name": nameOfRoom,
"address": roomEmailAddress
]
]
],
"locationConstraint": [
"isRequired": "true",
"suggestLocation": "false",
"locations": [
[
"displayName": "First Floor Test Meeting Room 1",
"locationEmailAddress": "FirstFloorTestMeetingRoom1@microsoft.com"
],
[
"displayName": "Ground Floor Test Meeting Room 1",
"locationEmailAddress": "GroundFloorTestMeetingRoom1@microsoft.com"
]
//and the rest of the rooms below this.. how do i do this outside in a loop? to prevent repetitive code?
]
],
"timeConstraint": [
"activityDomain":"unrestricted",
"timeslots": [
[
"start": [
"dateTime": dateStartString,
"timeZone": Resources.utcString
],
"end": [
"dateTime": dateEndString,
"timeZone": Resources.utcString
]
]
]
],
"meetingDuration": durationOfMeeting,
"returnSuggestionReasons": "true",
"minimumAttendeePercentage": "100",
"isOrganizerOptional": "true"
]
return jsonObj
}
Что такоелучший способ сделать это?Могу ли я просто удалить часть местоположений в JSON и, прежде чем вернуться, заполнить ее массивом местоположений?
Я пытался реализовать метод добавления местоположений в JSON - используя этот метод:
static func addLocationsToExistingJson(locations: [String], jsonObj: [String: Any]) -> [String: Any] {
var data: [String: Any] = jsonObj
for i in stride(from: 0, to: locations.count, by: 1){
let item: [String: Any] = [
"displayName": locations[i],
"locationEmailAddress": locations[i]
]
// get existing items, or create new array if doesn't exist
var existingItems = data["locations"] as? [[String: Any]] ?? [[String: Any]]()
// append the item
existingItems.append(item)
// replace back into `data`
data["locations"] = existingItems
}
return data
}
и вызов этого метода перед возвратом JSON в исходном методе. Но кажется, что окончательный формат JSON не тот формат, который мне нужен.Неправильная версия выглядит следующим образом:
["timeConstraint": ["activityDomain": "unrestricted", "timeslots": [["start": ["dateTime": "2019-02-07 14:00:00", "timeZone": "UTC"], "end": ["dateTime": "2019-02-07 15:00:00", "timeZone": "UTC"]]]], "minimumAttendeePercentage": "100", "isOrganizerOptional": "true", "returnSuggestionReasons": "true", "meetingDuration": "PT60M", "attendees": [["type": "required", "emailAddress": ["name": "N", "address": "TestUser6@qubbook.onmicrosoft.com"]]], "locationConstraint": ["isRequired": "true", "suggestLocation": "false"]]
В то время как рабочий JSON выглядит следующим образом:
["timeConstraint": ["activityDomain": "unrestricted", "timeslots": [["start": ["dateTime": "2019-02-07 14:30:00", "timeZone": "UTC"], "end": ["dateTime": "2019-02-07 15:30:00", "timeZone": "UTC"]]]], "attendees": [["type": "required", "emailAddress": ["name": "N", "address": "TestUser6@qubbook.onmicrosoft.com"]]], "minimumAttendeePercentage": "100", "locations": [["displayName": "FirstFloorTestMeetingRoom1@qubbook.onmicrosoft.com", "locationEmailAddress": "FirstFloorTestMeetingRoom1@qubbook.onmicrosoft.com"], ["displayName": "GroundFloorTestMeetingRoom1@qubbook.onmicrosoft.com", "locationEmailAddress": "GroundFloorTestMeetingRoom1@qubbook.onmicrosoft.com"]], "locationConstraint": ["isRequired": "true", "suggestLocation": "false"], "meetingDuration": "PT60M", "isOrganizerOptional": "true", "returnSuggestionReasons": "true"]
Как бы я изменил свой код, чтобы местоположения добавлялись под объектом locationConstraint в пределахJSON, а не просто JSON, а не часть ["locationConstraint"]?