Atlanta got an RBI single from Freddie Freeman and another impressive start by rookie Alex Wood in splitting the two-game series for its 20th victory in 24 games. The Braves also benefited from a disputed call in the 10th.
Andrelton Simmons singled off Scott Atchison (3-2) with two outs and Freeman hit a two-strike grounder back toward the box that ticked off the bottom of Scott Rice's glove and rolled behind him. The reliever retrieved the ball and fired to first, where Freeman was called safe.
Greg Burke allowed Johnson's homer.
Luis Avilan (5-0) pitched out of a bases-loaded jam in the ninth and Craig Kimbrel reached 40 saves for the third straight season. He has converted 30 chances in a row.
CARDINALS 8, BREWERS 6
MILWAUKEE (AP) — Carlos Beltran and Allen Craig hit towering home runs in St. Louis' six-run second inning, and the Cardinals held off Milwaukee.
Matt Holliday also homered and Shane Robinson had three hits for the Cardinals, who are one game behind Pittsburgh in the NL Central race.
After taking a one-run lead in the first inning on a double by Craig, the Cardinals went ahead 7-0 in the second off Brewers starter Tom Gorzelanny (3-5). Starting pitcher Jake Westbrook hit a bases-loaded double into the left-centre field gap that scored two runs.
The Brewers cut into the lead in the third on a three-run homer by Aramis Ramirez, and then added two runs in the fifth.
Kevin Siegrist (2-1) recorded two outs to notch the victory. Edward Mujica earned his 33rd save in 35 attempts despite giving up a home run to Logan Schafer in the ninth.
PADRES 2, PIRATES 1
SAN DIEGO (AP) — Ian Kennedy pitched seven strong innings, combining with two relievers on a four-hitter, and Yonder Alonso drove in two runs as San Diego beat Pittsburgh to avoid a three-game sweep.
Kennedy (5-9) won for the second time in four starts since being obtained from the NL West-rival Arizona Diamondbacks on July 31. He held Pittsburgh to four hits, struck out eight and walked three.
Luke Gregerson pitched the eighth, walking Felix Pie and allowing Andrew McCutcheon's sacrifice fly, and Huston Street worked the ninth for his 24th save in 25 chances.
Gerrit Cole (6-6) allowed two runs and 10 hits in six innings, struck out five and walked none.
PHILLIES 4, ROCKIES 3
PHILADELPHIA (AP) — Michael Young hit the winning single with one out in the ninth inning after Carlos Ruiz tied the game with a double, pushing Philadelphia past Colorado.
Erik Kratz opened the ninth with a double off closer Rafael Betancourt (2-4). Pinch runner Casper Wells advanced to third on a grounder and scored the tying run on Ruiz's pinch-hit double to left. Jimmy Rollins was walked intentionally and Young followed with the winning single to left.
Jake Diekman (1-3) tossed a scoreless ninth for the win.
Wilin Rosario homered for Colorado. Chase Utley went deep for the Phillies.
Phillies starter Cliff Lee remained winless since July 5 and is 0-4 with two no-decisions since beating Atlanta.
DODGERS 4, MARLINS 1
MIAMI (AP) — Zack Greinke allowed one run in eight innings to win his fourth start in a row Wednesday, and the Los Angeles Dodgers took advantage of sloppy defence by Miami for the second consecutive night.
Greinke (12-3) allowed six hits, walked none and lowered his ERA to 2.91.
The Marlins' lone run came on a first-inning homer by Giancarlo Stanton, and they had only one hit after the fourth inning.
Miami committed a season-high three errors, including two in the Dodgers' three-run fourth inning.
The Dodgers improved to 27-5 since the All-Star break, and they have won 21 of their past 24 road games. They are unbeaten in their past 18 series since mid-June.
REDS 10, DIAMONDBACKS 7
CINCINNATI (AP) — Shin-Soo Choo went 4 for 5 with a homer and three RBIs to spark Cincinnati's offensive outburst in a win over Arizona.
The Reds opened a six-game lead over Arizona in the race for the National League's second wild-card spot.
Cincinnati remained third in the NL Central, but moved to 2 1/2 games behind first-place Pittsburgh.
Mike Leake allowed four runs in the fifth inning, but was dominant in his other five innings for first win in his past five starts.
Leake (11-5) allowed six hits and four runs with no walks and three strikeouts while the Reds were building an 8-0 lead.
Aroldis Chapman pitched the final two innings for his 32nd save — his first career two-inning save.
NATIONALS 11, CUBS 6
CHICAGO (AP) — Jayson Werth and Scott Hairston hit three-run homers to lead Washington over Chicago.
Werth's three-run homer in the third inning off Jake Arrieta gave the Nationals a 6-1 lead and was his eighth since the All-Star break.
Hairston, who was traded by the Cubs on July 8, was pinch-hitting for Tanner Roark and hit his off James Russell (1-4) with two outs in the seventh to give the Nationals a 9-6 lead after they had given up a 6-1 lead.
Anthony Rizzo hit his first two homers since Aug. 6 and had three RBIs, but couldn't stop the Cubs from losing their 15th in their past 18 at home.
Ross Ohlendorf was activated off the disabled list before Wednesday's game by Washington and allowed four runs and six hits and 4 1-3 innings.
Roark (3-0) allowed two runs in the fifth, but pitched 1 2-3 innings for the win.
RED SOX 12, GIANTS 1
SAN FRANCISCO (AP) — Stephen Drew and Will Middlebrooks each hit a home run, Jonny Gomes and Jarrod Saltalamacchia drove in two runs apiece, and Boston beat San Francisco.
Felix Doubront (9-6) rebounded from a tough outing to pitch eight strong innings for the Red Sox, who have won three of five. Doubront gave up one run on five hits. He walked one and struck out three.
Joaquin Arias homered among his two hits for the Giants, who have lost three of four.
Barry Zito (4-9) lasted 3 2-3 innings in his first start since July 30. He allowed six runs on seven hits, walked two and struck out three.
Jacoby Ellsbery and Shane Victorino each had three hits for Boston.