Play was ended early as a thunderstorm passed over the ground, and the close of play was called at 5.27pm.
The Proteas still trailed Australia by 257 runs with four first innings wickets in hand, after the visitors had been bowled out for 397 after lunch.
Johnson returned figures of 4/51 for the day, but it was his spell with the new ball at the start of the South African innings which rocked the Proteas lineup.
The Aussie left-armer produced an opening spell of 3/10 from four overs as the hosts were reduced to 23 for three.
AB de Villiers (52 not out) was the only South African to trouble the Aussie bowlers, Johnson in particular.
De Villiers was joined by JP Duminy at the crease with the Proteas on 43 for four, after Hashim Amla was out lbw for 17 to Peter Siddle.
Together the pair compiled a 67 run partnership off 108 balls, before Duminy was out. Duminy played a lofted off drive off Nathan Lyon which hung in the air, before Johnson ran back to take a fine catch.
Ryan McLaren (8) came in, and had his offstump removed by Johnson, as the allrounder played around a ball that cannoned into the woodwork after it had pitched outside off.
Earlier,the Proteas whittled out the Aussie lower order after the visitors came out after lunch on 374 for seven.
Dale Steyn nipped out Ryan Harris (19), while Robin Peterson bowled the dangerous Mitchell Johnson for 33.
Peter Siddle was the last man to fall, bowled by Steyn as the seamer returned figures of 4/78 from 29 overs.
Shaun Marsh top-scored with 148, his highest Test score, and Steven Smith made 100. The pair shared a 233-run stand — the highest fifth-wicket partnership at the ground, passing South Africans Ashwell Prince and Herschelle Gibbs who put on 213 against Pakistan in Centurion in January 2007.