MIAMI -- Pitching in a laugher, Josh Johnson never changed expression.
Even after driving in three runs and reaching base with his third single, Johnson remained impassive. When he received a big ovation walking to the dugout after eight innings, he kept his head down.
Johnson (2-1), who signed a $39 million, four-year contract in January, pitched past the sixth inning for the first time in five starts this season.
"It felt good to finally get in that rhythm and find that tempo," he said. "It has been a long time coming. I felt it when I was playing catch in the outfield before the game. I was like, `Whoa, here we go. Things were starting to click.' I figured it would be a good day."
Johnson's strikeout total was a career high, and the three-hitter was a personal best. He walked one and threw 117 pitches in his fourth career complete game, his first since June 14, 2009.
His first strikeout came against the second batter he faced, David Eckstein.
"That's when I knew he had something special," catcher John Baker said. "Eckstein never strikes out."
Johnson's fastball topped out at 98 mph, and he mixed in effective sliders and -- especially late in the game -- his changeup. Marlins manager Fredi Gonzalez said it was as good as he has seen Johnson throw.
"It's not easy to pitch with that big of a lead," Gonzalez said. "Pitchers have a tendency to lose their concentration in those situations, and he didn't."
His teammates' reaction?
"We were just laughing at him," Baker said.
Johnson singled home a run in the second, added a two-run single in the third and finished 3 for 4.
"It's fun, but pitching is way better," he said.
San Diego's only run came on a sacrifice fly by pinch-hitter Matt Stairs in the eighth to score Nick Hundley, who had doubled. The Padres, who began the day leading the NL West, lost their second game in a row after winning eight straight.
Mat Latos (1-2), who pitched seven shutout innings in his previous start, made the quickest exit of his career. He gave up seven hits and seven runs in 2 2/3 innings and walked three, doubling his total for the year.
"It just wasn't my day," Latos said. "I walked a guy with the bases loaded, something I've never done in my entire lifetime."
The Marlins tied their season high for runs, while San Diego gave up a season high.
"You're going to have those from time to time," Padres manager Bud Black said. "That's the first one this year. We've laid it on a couple of teams, but tonight it was their turn."
Florida struck out 12 times but went 5 for 13 with runners in scoring position and scored seven runs with two outs.
Ramirez hit his second home run in the first inning.
Florida scored twice in the second. Baker singled and came home on Cody Ross' double. Johnson's two-out single scored Ross.
The Marlins added four runs in the third to make it 7-0. Uggla had an RBI single, Gaby Sanchez walked with two outs and the bases loaded, and Johnson hit a sharp single on a 3-2 pitch to drive in two more.
Johnson batted again with the bases loaded in the sixth but struck out, leaving his average at .300.
"He had a career night," Latos said. "He's a potential Cy Young winner. Hats off to him."
The Marlins activated RHP Brian Sanches (right hamstring) from the disabled list. LHP Dan Meyer was placed on the DL retroactive to Sunday with a strained left calf. ... Florida CF Cameron Maybin was back in the lineup after being sidelined by a headache following a collision with Sanchez on Saturday. ... Top Marlins prospect Mike Stanton is making a strong case for a call-up -- he hit two home runs Sunday and three more Monday for Double-A Jacksonville against Carolina. He has nine homers to lead the minor leagues, and he's batting .338. "His swing is not quite there yet," Gonzalez joked. ... Padres RHP Jon Garland, scheduled to start Tuesday, is 2-1 with a 2.28 ERA in four career starts against the Marlins.