Johnson followed by belting the first of his two shots, a fly ball that just cleared the fence in right-center field for three runs.
Arizona piled it on in the ninth as Montero stroked an RBI double and Johnson connected for a two-run blast, finishing with five RBI.
The late outburst made a winner of Brad Ziegler (5-1), who go the final two outs of the seventh as the D-backs evened their four-game set with the Pirates at one win apiece.
Stephen Drew went 3-for-4 with a solo homer and two RBI in the win.
Andrew McCutchen drove in two runs and Starling Marte socked a solo homer for the Bucs.