Hudson threw 107 pitches before giving way to Aaron Heilman in the eighth. Heilman worked around a lead-off infield single and Joe Paterson then turned in a perfect ninth to complete the shutout.
The Diamondbacks did most of their damage with a three-run third, during which they sent nine men to the plate.
Stephen Drew singled in the first run of the inning, Melvin Mora had a bases-loaded hit that produced another run and Drew eventually scored from third on a ground out by Juan Miranda. Arizona left the bases full in the inning.
Justin Upton added a two-run homer in the fourth.
The loss went to Dustin Moseley (1-4), who allowed six runs on eight hits in five innings.