Arizona scored in every inning except the second and took the lead for good with a four-run fourth in which Montero had an RBI single and Johnson an RBI double.
Montero also delivered two runs with a double in the third and Johnson hit a two-run homer in the seventh. Adam Eaton contributed a two-run shot in the sixth for Arizona, which climbed within 4 1/2 games of St. Louis for the No. 2 wild card slot in the National League.
Colorado, already assured of finishing last in the NL West, has lost seven in a row.
The Diamondbacks' offense allowed Wade Miley (16-10) to claim the win even though he gave up 10 hits and five runs over six innings.
The first four Arizona runs came off Drew Pomeranz (1-10) over the first three innings.