Johnson's first homer of the season was one of three for the usually power-starved Padres, who also had unlikely round-trippers from starting pitcher Mat Latos and Eric Patterson, who came off the bench hitting .067.
The game was the first multi-homer game of the season for the Padres. Latos' solo homer in the third inning was the first home run ever hit by a San Diego pitcher in Petco Park.
Mike Adams (1-0) was the winner in relief of Latos, who gave up two runs on five hits in six innings. Heath Bell tied a team record set by Trevor Hoffman with his 41st consecutive save.
Joe Beimel (0-1) took the loss for Pittsburgh and was also hung with a blown save.
Andrew McCutcheon and Neil Walker drove in two runs apiece for the Pirates, who scored three runs in the seventh inning to take a 5-3 lead but could not keep the Padres off the board.
Duggar sisters unveil Christian dating rules in new book
McPhee, Cokas 'working on their marriage' after affair