A superb display by Niall McGinn inspired Aberdeen to a deserved win in atrocious conditions at Pittodrie.
Frazer Wright's volley over the bar was the sum of the visitors' first-half efforts against a raft of wasted Aberdeen chances.
But, 10 minutes after the interval, McGinn curled a free-kick from 22 yards beyond Saints keeper Alan Mannus.
And, in front of Aberdeen's lowest home crowd this season, he scored a second, racing on to a Jamie Masson pass.
The result lifts Aberdeen above St Johnstone in the Scottish Premier League, into fourth spot.
Aberdeen captain Russell Anderson won the toss and opted to begin the game with the freezing, driving wind and rain at his team's back.
And, in front of a crowd depleted by the hideous conditions, indifferent home form and the game's proximity to Christmas, it was the Dons who provided most of the entertainment for the 7,051 brave fans in the first half.
McGinn has been an inspirational figure for Craig Brown's men this season and he almost put his team in front with a rasping shot from 25 yards that Mannus parried away just before it sneaked in at the top corner.
Chris Millar drove wide for the Saints to remind the home team of the visitors' threat, but it was McGinn who looked the most promising player on show when he powered a wind-assisted shot from 18 yards that the drenched Mannus saved sharply.
Brown had opted for the burly Josh Magennis to partner Rory Fallon up front and the latter really ought to have burst the net from eight yards instead of volleying wide after a cross from the left had been deflected by the Northern Irishman into his path.
In a scrappy match, the tide continued to flow towards the Saints goal. Megginson, having won his team a corner after a purposeful run, got on the ball again and crossed to the back post, where Fallon and Anderson dived to head home, only to miss the ball entirely.
Paddy Cregg came on to replace Saints' Millar, preceding a dreadful miss by Wright as he diverted Mackay's sweeping cross from the right over the bar from six yards.
The rump of St Johnstone fans, huddled together like frozen penguins, were incredulous.
Soon, though, the McGinn and Mannus contest resumed and, just before half-time, the Dons player volleyed Magennis's wonderful cross from the left and somehow Mannus made a block with his legs.
In 55 minutes McGinn flashed a shot across the face of goal and eight minutes later he smacked home a curling free-kick for the opener.
Unbowed by conceding the goal, Mannus continued to thwart the efforts of the home attackers as the St Johnstone midfield failed to keep possession for anything more than 10 seconds.
The keeper got a hand to a McGinn drive from the left to concede a corner and then made a superb double save to keep St Johnstone in the game, Magennis and McGinn trying their luck in quick succession.
With 10 minutes remaining, Aberdeen made the points secure as McGinn raced on to a ball from the left by sub Masson to keep his cool and slot the ball home from 14 yards.
It was just reward for the home team and the fans who braved the weather to support their team.
Full Time The final whistle goes and the game is over.
Nigel Hasselbaink takes a shot. Save by Jason Brown.
Jamie Masson delivers the ball, save made by Alan Mannus.
90:00 +0:50 Substitution
Substitution (Aberdeen) makes a substitution, with Craig Murray coming on for Rory Fallon.
Effort from outside the penalty box by Jordon Brown goes wide right of the target.
Short corner taken by Liam Craig from the right by-line.
Foul by Jamie Masson on Murray Davidson, free kick awarded. Direct free kick taken by Murray Davidson.
Substitution Jordon Brown is brought on as a substitute for Josh Magennis.
Nigel Hasselbaink gives away a free kick for an unfair challenge on Joe Shaughnessy. Russell Anderson takes the free kick.
Outswinging corner taken by Niall McGinn.
Foul by Patrick Cregg on Gavin Rae, free kick awarded. Free kick crossed by Niall McGinn.
Corner taken left-footed by Liam Craig, save by Jason Brown.
Gregory Tade concedes a free kick for a foul on Clark Robertson. Clark Robertson restarts play with the free kick.
Assist by Jamie Masson.
80:53 Goal scored
Goal! - Niall McGinn - Aberdeen 2 - 0 St J'stone Goal scored by Niall McGinn from deep inside the penalty box low into the middle of the goal. Aberdeen 2-0 St Johnstone.
Substitution Gary Miller leaves the field to be replaced by Nigel Hasselbaink.
Josh Magennis takes a shot. Alan Mannus makes a save. Niall McGinn takes a shot. Save by Alan Mannus. Outswinging corner taken right-footed by Niall McGinn from the right by-line, clearance by Frazer Wright.
Foul by Callum Davidson on Josh Magennis, free kick awarded. Niall McGinn takes the direct free kick. Outswinging corner taken by Niall McGinn, Liam Craig makes a clearance.
The assistant referee flags for offside against Frazer Wright. Indirect free kick taken by Jason Brown.
Clark Robertson gives away a free kick for an unfair challenge on Gregory Tade. Liam Craig crosses the ball in from the free kick. Corner taken by Liam Craig from the left by-line, Russell Anderson makes a clearance.
Free kick awarded for an unfair challenge on Patrick Cregg by Josh Magennis. Alan Mannus takes the direct free kick.
Effort from just outside the area by Liam Craig goes over the target.
Centre by Josh Magennis, David MacKay manages to make a clearance.
Gregory Tade concedes a free kick for a foul on Scott Vernon. Mark Reynolds restarts play with the free kick.
Niall McGinn takes a shot. Save by Alan Mannus. Corner from right by-line taken by Niall McGinn.
Inswinging corner taken from the left by-line by Niall McGinn, Header from deep inside the area by Josh Magennis goes harmlessly over the crossbar.
Centre by Scott Vernon, save by Alan Mannus.
Niall McGinn takes a short corner.
Substitution Gregory Tade on for Rowan Vine.
Outswinging corner taken by Niall McGinn, Liam Craig manages to make a clearance.
62:28 Goal scored
Goal! - Niall McGinn - Aberdeen 1 - 0 St J'stone Niall McGinn scores a goal direct from the free kick from outside the penalty box to the bottom right corner of the goal. Aberdeen 1-0 St Johnstone.
Free kick awarded for a foul by Callum Davidson on Josh Magennis.
Substitution (Aberdeen) makes a substitution, with Jamie Masson coming on for Mitchel Megginson.
Rowan Vine is flagged offside by the assistant referee. Mark Reynolds restarts play with the free kick.
Effort from just outside the area by Liam Craig goes over the bar.
The assistant referee flags for offside against Steven MacLean. Jason Brown takes the indirect free kick.
Free kick awarded for a foul by Steven MacLean on Scott Vernon. Mark Reynolds takes the free kick.
Gary Miller gives away a free kick for an unfair challenge on Mitchel Megginson. Clark Robertson takes the free kick.
Shot from close range by Niall McGinn misses to the right of the goal.
Liam Craig takes the inswinging corner, Scott Vernon manages to make a clearance.
Free kick awarded for a foul by David MacKay on Mitchel Megginson. Niall McGinn crosses the ball in from the free kick, clearance made by David MacKay.
The offside flag is raised against Rowan Vine. Mark Reynolds restarts play with the free kick.
Scott Vernon crosses the ball, clearance by Frazer Wright.
The second half kicks off.
45:00 +0:20 Half time
Half Time The match has reached half-time.
Headed effort from inside the area by Rory Fallon misses to the left of the target.
Shot by Josh Magennis missed to the left of goal.
Gavin Rae takes a shot.
Mark Reynolds gives away a free kick for an unfair challenge on Steven MacLean. David MacKay takes the direct free kick.
Rowan Vine sends in a cross.
Niall McGinn takes a shot. Save made by Alan Mannus.
Joe Shaughnessy produces a cross, save made by Alan Mannus.
Joe Shaughnessy takes a shot from long range which goes wide of the right-hand post.
Frazer Wright takes a shot from close range clearing the crossbar.
Corner taken short by Rowan Vine.
Substitution Patrick Cregg replaces Chris Millar.
Shot by Rory Fallon from outside the box goes over the target.
Short corner taken by Mitchel Megginson from the right by-line.
Unfair challenge on Russell Anderson by Steven MacLean results in a free kick. Russell Anderson takes the direct free kick.
Mitchel Megginson fouled by Murray Davidson, the ref awards a free kick. Free kick taken by Jason Brown.
Mitchel Megginson concedes a free kick for a foul on Rowan Vine. Callum Davidson takes the direct free kick.
Niall McGinn takes a shot. Save by Alan Mannus.
Corner from the right by-line taken by Liam Craig, Joe Shaughnessy manages to make a clearance.
Rory Fallon produces a volleyed right-footed shot from deep inside the penalty box which goes wide of the right-hand upright.
Niall McGinn takes a shot. Save by Alan Mannus.
The official flags Rowan Vine offside. Jason Brown restarts play with the free kick.
Mitchel Megginson challenges Callum Davidson unfairly and gives away a free kick. Direct free kick taken by Callum Davidson.
Corner taken by Liam Craig from the right by-line, clearance by Mark Reynolds.
Mitchel Megginson takes a shot. Clearance by Frazer Wright. Outswinging corner taken right-footed by Mitchel Megginson, free kick awarded for an unfair challenge on Frazer Wright by Josh Magennis. Direct free kick taken by Alan Mannus.
Niall McGinn takes a shot. Save by Alan Mannus.
The offside flag is raised against Josh Magennis. Indirect free kick taken by Frazer Wright.
Chris Millar challenges Mitchel Megginson unfairly and gives away a free kick. The free kick is swung in right-footed by Niall McGinn, clearance made by Callum Davidson.
Chris Millar gives away a free kick for an unfair challenge on Rory Fallon. Scott Vernon restarts play with the free kick.
This page is best viewed in an up-to-date web browser with style sheets (CSS) enabled. While you will be able to view the content of this page in your current browser, you will not be able to get the full visual experience. Please consider upgrading your browser software or enabling style sheets (CSS) if you are able to do so.