Johnson also popped an RBI single during the deciding, two-run sixth inning against Rockies starter Ubaldo Jimenez (8-11).
The Rockies fell to 2-6 on a homestand that they hoped would be their awakening. Instead, they're nine games behind the National League West-leading Diamondbacks with 41 to play.
The D-backs also have them in a sleeper hold, having beaten them in nine of their 10 meetings.
"I honestly didn't even realize that," said Clint Barmes, who had two hits but little help. "I can't explain it. I can't understand. Obviously, they've got a good team."
Garrett Atkins, one of their better hitters and an asset against the left-handed Johnson, arrived with strep throat and was sent home. Also, No. 1 pitcher Aaron Cook announced his next turn is being skipped because of tightness in the small of his back.
Then the Rockies blew a winnable game with poor at-bats with two runners on base.
In the fifth, Johnson walked Jimenez on five pitches but needed just one pitch to retire both Willy Taveras and Troy Tulowitzki. In the seventh with one out and runners at the corners, Taveras grounded into just his second double play of the season against Chad Qualls.
"It's been a rough homestand," Tulowitzki said. "It makes it a little bit tougher when we had some opportunities and didn't make the most of them.
"Its just tough to take when you feel like you should've won a game."
This was the type of game the Rockies won last year, when they won 21 of 22 to qualify for the World Series. It's also the exact game they've made a habit of losing this season and during an awful homestand.
The Rockies came back from a 6-4 road trip for three-game sets with the Nationals and the Padres, the NL's worst teams. But they were barely in any of the five losses to them.
Either they struggled with runners in scoring position or, as was the case Tuesday when they were out-hit, 12-7, they were rarely putting runners in position to be stranded.
"Just enough mistakes across the board to put us down by two runs at the end of the night," Rockies manager Clint Hurdle said.
Hurdle switched his rotation so Jimenez, Jeff Francis and Cook could face the D-backs. But Jimenez and Cook, who will be replaced by Glendon Rusch for Thursday's series finale, have lost twice and Francis has lost once during the homestand.
Francis, in his second start since returning from a shoulder injury, goes Wednesday night.
Actually, Jimenez was decent. He faced almost constant traffic, with 11 hits and two walks in six innings. Essentially, he paid for a few bad pitches.
Jimenez gave up a Chad Tracy home run after a leadoff walk to Mark Reynolds in the second. The Rockies tied it in the second, with Chris Iannetta's 14th home run of the season to lead off, and Ian Stewart's RBI double behind Barmes' double.
In the D-backs' sixth, Chris Young and Chris Snyder had consecutive one-out doubles to score one run, and Johnson tapped a fastball into right field for the other run.
Jimenez, a part of last season's late magic, admitted having a hard time with how maddeningly wrong the homestand has gone.
"It's not easy," Jimenez said. "We haven't been doing well, pitching or hitting. The defense is really good. But we haven't been able to put everything together so we can win."