AB de Villiers fell nine runs short of a century in a masterful knock, and fittingly it was Johnson who ended his resistance 45 minutes before lunch was due on Friday at Centurion.
De Villiers, who came to the crease on day two with the score 3-23 after Johnson sliced through the top order, dug the Proteas out of serious trouble in response to Australia's 397.
But the 29-year-old fell to a mistimed drive shortly after shepherding his side past the follow-on.
Johnson then had Morne Morkel caught behind with his next ball, a fantastic bouncer, to complete the carnage he started on day two with a fearsome bouncer to Graeme Smith.
The left-armer needed four balls on day three to grab his 11th Test five-wicket haul with the scalp of Robin Peterson, who popped up a bouncer to Michael Clarke.
Vernon Philander formed a partnership of 49 runs with de Villiers, but Nathan Lyon made the breakthrough courtesy of Clarke's second successful DRS review of a lbw decision.