The Braves need only one more win or a loss by the Washington Nationals to sew up their first National League East division pennant since 2005.
Atlanta had three of its eight hits in the game in the ninth, scoring four times to break a tie and beat Kevin Gregg (2-5).
David Carpenter (4-1) pitched a 1-2-3 eighth inning in earning the win.
Chicago came back from a 5-1 deficit with a Starlin Castro home run in the fifth, a home run by Donny Murphy and an RBI single from Luis Valbuena in the sixth and Dioner Navarro's home run in the seventh.
Atlanta made the most of its few hits as Johnson homered in the second and Freddie Freeman hit a home run after two walks to give the Braves a 4-0 lead in the third. The Cubs' Anthony Rizzo singled in a run in the bottom of the inning but Paul Maholm made the score 5-1 with a double to drive in Johnson in the fourth.