Atlanta led 3-2 through six innings, but Anthony Varvaro (1-1) and Luis Avilan couldn't make the lead stand up.
Xander Bogaerts and Dustin Pedroia singled off Varvaro, who was replaced by the lefty Avilan to face slugger David Ortiz. The move did not pay off for Atlanta, as Ortiz dropped an opposite field single into left to tie the score. Jonny Gomes then blooped a single down the first base line, and the winning run came home on Grady Sizemore's broken-bat dribbler to short.
After David Ross was walked intentionally, Jackie Bradley Jr. slapped a two- run single to left to pad the cushion.
Pedroia had three hits for Boston, winners in two straight following its 10- game losing skid. Sizemore and Bradley each had a pair of hits and a stolen base, while Bradley drove in two.
The teams head to Boston to play two more games at Fenway Park starting Wednesday.
Jon Lester (5-6) was charged with all three runs on eight hits over six innings, fanning seven and breaking a personal two-game losing skid. Koji Uehara needed just 11 pitches to get through the ninth and nail down his 11th save of the season.
Brock Holt singled past second base to lead off the game and Johnson fumbled Bogaerts' grounder to third. Holt moved to third on a wild pitch and Pedroia made it 1-0 with a sacrifice fly to deep left.
Heyward's solo blast to start the bottom of the first quickly erased Boston's lead, and Johnson's sac fly two innings later made it 2-1 in favor of the Braves.
Sizemore doubled and stole third in the top of the fourth, setting up Ross' RBI single to left-center that knotted it at 2-2.
Johnson had the Braves back in front when he dropped an RBI single into right in front of a charging Gomes in the fifth.