The Braves had just six hits through 9 2/3 innings before Andrelton Simmons singled off Scott Atchison (3-2) and Freddie Freeman got a base hit off Scott Rice.
Johnson, who was 0-for-4 with three strikeouts going into the 10th, hit the first pitch from reliever Greg Burke into the seats beyond left field for his 10th home run of the season.
That handed the win to Luis Avilan (5-0), who allowed a hit and walked two before pitching out of a bases-loaded jam in the ninth. Craig Kimbrel came on in the 10th and earned his major-league leading 40th save.
Atlanta starter Alex Wood gave up six hits and one run -- a fourth-inning home run by Josh Satin. He walked two and struck out four.
Braves right fielder Jason Heyward left the game after being hit on the earflap of his helmet with two out in the sixth in New York starter Jon Niese.
Simmons followed with a single that put Heyward's pinch-runner Jordan Schafer in scoring position. Freeman then singled Schafer in to tie the score.