The Azzurri thought they have taken the lead when Giorgio Chiellini stabbed home from the corner. However, it was disallowed for handball.
Locatelli then continued his fine performance by getting his second, firing a fine drive into the bottom right from 25 yards.
Ciro Immobile confirmed the victory with a long-range effort to cap off a fantastic night in Rome.
Here is how we marked both sides on Wednesday night.
Rarely troubled but was alert when needed. Produced a fantastic double save to deny Steven Zuber.
Deputising for Alessandro Florenzi, Di Lorenzo put in an astute display and battled until the very end.
Made some good decisions when under pressure and defended well.
Led the defence to a 10th-straight clean sheet with the Azzurri. Even when the game was practically finished, Bonucci defended with his life to preserve the clean sheet.
Was not affected by the loss of Chiellini early on.
Only managed 24 minutes of the game, coming off holding his hamstring. Up until that point, the centre-half remained relatively unchallenged in his defensive third.
The 36-year-old thought he had opened the scoring in the 19th minute, but it was disallowed for handball.
For the second game running, Spinazzola performed superbly. He was a constant threat down the left-hand side and was excellent from a defensive standpoint.
Nicolo Barella - 7
Barella oozes class and the way he moved the ball to keep Italy fluid in possession was essential.
His progressive passes helped the Azzurri to maintain their high intensity ball movement, and his defensive capabilities ensured Italy recycled possession.
Also recorded an assist for Locatelli's second.
Standard performance from Jorginho: sits deep to switch possession and breaks up play when the opposition counter - today Switzerland were the culprits.
Manuel Locatelli - 9 (Star Man)
Locatelli produced a virtuous display as an advanced 'eight' in Italy's three, as his late runs and ball retention caused problems for Switzerland. His overall display would have warranted his high mark, but his two excellent goals assured us of his 'star man' accolade.
The midfielder began the move for his opener with a one-touch volleyed pass out to Berardi, who subsequently laid the ball on for Locatelli to finish.
Overall, a phenomenal performance by Locatelli.
A threat throughout, his wing-play provided the assist for the opener.
Immobile had several chances throughout the game, but got his deserved goal at the death to make it two goals in two games at Euro 2020.
Impressed with his link-up play with Locatelli and Spinazzola on the left. Insigne never really got a sight at goal, but he was electric with his movement and stretched Switzerland's back three.
Replacing Chiellini on 24 minutes, Acerbi filled in perfectly for the veteran, defending well alongside Bonucci.
Replaced Insigne on 69 minutes. Struggled to affect play.
Rafael Toloi - 6
Replaced Berardi on 69 minutes. Assisted Immobile in the last minute.
Replaced Locatelli on 87 minutes.
Bryan Cristante - N/A
Replaced Barella on 87 minutes.
Made a couple of good saves but was at fault for Immobile's strike.
Like the whole of the Swiss defence, Elvedi watched Italy pass around him for most of the match.
A bystander for most of the game. Lost track of Immobile on several occasions. A poor night for the centre-half.
Again, failed to make an impact in stopping Italy's momentum.
Mbabu was probably La Pati's biggest threat going forward, as he help drive his side up the field on the right.
Defended well against Spinazzola on a few occassions, however, the Italian often had the better of the wide midfielder.
Remo Freuler - 5
Spent a long time chasing the ball between Italy's midfield trio. Ineffective performance.
Played the ball well from deep but struggled to break up play in the centre.
Poor performance from Rodriguez. Made a lot of misplaced passes and his touches were heavy as he conceded possession too often.
Was ill-effective in his 45 minutes of action. Failed to make anything stick up top against a high-intensity Italy.
Switzerland's best player on the pitch, Shaqiri was often tried to force things to happen for his side.
Had the Italian backline defending for their lives on several occasions late on.
Like a lot of his teammates, he spent a large period watching Italy attack. Looked a powerhouse when in possession, but the Azzurri often dealt with his presence.
Mario Gavranovic - 5
Replaced Seferovic at half-time and only took three minutes to be booked. Poor.
Steven Zuber - 6
Replaced Schar on the hour. First involvement was forcing a smart double saved out of Donnarumma.
Silvan Widmer - 5
Replaced Mbabu on the hour. Failed to make an impact.
Ruben Vargas - N/A
Replaced Shaqiri on 76 minutes. Rarely got on the ball.
Djibrl Sow - N/A
Replaced Freuler on 84 minutes. Too late to make an impact.