The Braves captured their third in a row and became the first team in the majors to reach 80 wins.
Schafer gave Atlanta the early lead with a two-run single in the second, but Cleveland eventually tied it with Mike Aviles delivering a solo homer in the fourth and a sacrifice fly in the eighth.
Joe Smith (5-2) took the mound for the Indians in the ninth trying to force extra innings, but he gave up a one-out single to Schafer.
Schafer stole second while Josh Upton was at the plate and, after Upton flew to center for the second out of the inning, Freddie Freeman was intentionally walked.
That brought up Johnson, who on a 2-2 pitch singled to left to end the game.
Atlanta closer Craig Kimbrel (3-2) picked up the win by working the top of the ninth. Kimbrel leads the majors with 42 saves.