The visitors held firm with the scoreline at 1-1 for much of the afternoon, but Johnston produced the winner with five minutes left.
The 20-year-old had opened the scoring on two minutes before Jake Mulraney's equaliser 15 minutes later. Hearts were able to contain their hosts and enjoy the odd counter-attack before the game's decisive moment arrived late on.
Celtic handed the highly-regarded 16-year-old Karamoko Dembele his professional debut as an interval substitute. The little forward has represented both Scotland and England at youth level and it was easy to see the natural ability he possesses.
Very little insight into either team's plans for Saturday's Scottish Cup final could be gleaned from this encounter, however. They meet again at Hampden Park in six days' time, but the respective starting line-ups will undergo drastic change for the season's showpiece.
Hibs debrief: Alarm bells in the stand (and defence); Tavares decision; ref's big calls
Lee Johnson laments Hibs mentality after hairdryer treatment during Livingston loss
Ken Buchanan: Statue of Scottish boxing legend unveiled on Edinburghs’s Leith Walk
Livingston troll Hibs with 'Choose Livi' Twitter post following 2-1 win
Hibs on the wrong end of astounding statistic after latest defeat at Livingston
Three teenagers were named in a youthful Hearts team – Andy Irving (19) and Connor Smith (17), plus 16-year-old Aaron Hickey making his first senior start. Celtic also included some of their promising young talent on the day they paraded the Ladbrokes Premiership trophy for the eighth consecutive year.
That earned the hosts a pre-match guard of honour from their guests. Within two minutes, two of those prodigious Parkhead kids – Johnston and Ewan Henderson – combined to open the scoring. Johnston played a crisp one-two with his midfield colleague to enter the penalty box and drive a convincing finish beyond the Hearts goalkeeper Zdenek Zlamal.
Circumstances worsened for the Edinburgh club ten minutes later when Olly Lee was forced off injured. Substitute Ryan Edwards took the Englishman's central midfield berth. However, they recovered to equalise on 17 minutes by capitalising on a horrendous defensive error.
When the Celtic goalkeeper Scott Bain was closed down by Craig Wighton inside the penalty area, he took too long to clear and Wighton's toe intercepted the ball. It broke to Sean Clare to square for Mulraney, and the Irishman angled a clever finish over the scrambling Bain and into the top corner of the net.
The game continued in fairly even fashion through to the break, at which point Celtic introduced the diminutive Dembele. He made his senior debut as a replacement for Oliver Burke and instantly enlivened proceedings.
Zlamal made a phenomenal save to keep the scoreline level moments into the second period after tidy footwork and a 20-yard drive from Johnston. Dembele then produced the first glimpse of his sorcery. He evaded Hickey wide on the Celtic right and was tripped, but immediately got up to chase the ball and run at the visiting defence. After a jink inside, he dispatched a left-footed shot which soared off target.
Johnston and Dembele both forced Zlamal down for low saves in quick succession as Celtic increased the pace. Dembele looked particularly keen to mark his debut with a goal. Hearts introduced 39-year-old Aaron Hughes for the final appearance of his 22-year career. He took the captain's armband upon replacing John Souttar.
The home players appealed for a penalty ten minutes from time, Kristoffer Ajer claiming his shot struck the arm of Hearts centre-back Connor Shaughnessy. Eventually, their pressure brought a winner. Johnston capped an outstanding afternoon by exchanging passes with Callum McGregor, running with ease through the opposition and planting his finish into the net via Zlamal's right post.
Celtic (4-2-3-1): De Vries; Ralston, Benkovic (Simunovic 82), Ajer, Toljan; Bitton, Ntcham; Henderson (McGregor 64), Johnston, Sinclair; Burke (Dembele 46). Unused subs: De Vries, Church, Oko-Flex, Welsh.
Hearts (4-3-3): Zlamal; M Smith (Brandon 56), Souttar (Hughes 68), Shaughnessy, Hickey; C Smith, Irving, Lee (Edwards 12); Clare, Wighton, Mulraney. Unused subs: Doyle, Bozanic, Dikamona, Petkov.
Referee: Craig Thomson.