Updated

Only once did Josh Johnson peek at the scoreboard to check his pitch count, which was rising too quickly for him to go nine innings.

The first career shutout will have to wait, but the zeros keep coming.

Johnson gave up no runs for the second game in a row, allowing just two hits in seven innings to help Florida beat the Pittsburgh Pirates 6-0 Tuesday night.

Johnson (3-0) lowered his ERA to 1.00. He has allowed four hits or less in each of his four starts, and batters are hitting .112 against him.

Even so, he said, he can do better.

"Why not?" the right-hander said. "There's always room to improve."

That's true: Johnson has never thrown a shutout in 108 career starts. He was pulled by manager Edwin Rodriguez after throwing 98 pitches, 64 for strikes, and was fine with the decision.

"We were in agreement up 6-0," Johnson said.

Johnson has pitched 17 consecutive scoreless innings over his past three starts. After leading the NL in ERA last year, he added a curveball to his repertoire, making his 96-mph fastball even more effective.

Johnson said he threw seven or eight curves against the Pirates.

"He's getting more confident with that pitch," Rodriguez said. "It's going to take him to the next level."

Mike Dunn and Brian Sanches each worked one perfect inning to complete the two-hitter against a team that came into the game with the highest road batting average in the NL. Pittsburgh struck out 12 times.

Garrett Jones singled off the right-field wall to start the fifth inning for the Pirates' first hit, and pinch-hitter John Bowker singled in the sixth. Both runners were erased on double plays, and the Marlins faced only one batter more than the minimum.

Johnson struck out nine and walked one.

"If you're going to start a franchise and pick a pitcher, you're not going to go wrong picking him," Pirates manager Clint Hurdle said.

Johnson helped himself with a single to score the first two runs and laid down a sacrifice.

He contributed on defense, too, hustling to cover first and complete a nifty 3-6-1 double play. First baseman Gaby Sanchez fielded the ball and then dove out of the way so Johnson could catch the return throw.

"I was like, 'I got it,' and just hoping he heard me," Johnson said with a laugh. "If he had stood up a second longer I might not have seen the ball, because they threw it right over the top of his head."

Sanchez added two RBIs, and Emilio Bonifacio had three hits. Dunn and Sanches reduced a bullpen ERA that is the lowest in the majors at 1.81.

On a clear, 80-degree night, few witnessed the Marlins' first shutout this year. The announced crowd for the start of Florida's nine-game homestand was 11,118, and the actual attendance was perhaps 5,000.

Paul Maholm (0-3) allowed six runs and lasted only 3 2-3 innings, his shortest outing in four starts.

"It stinks," Maholm said. "I didn't give the team a chance to win. Facing Johnson, you've got to be good, and I wasn't."

Wildness hurt Maholm, who hit Mike Stanton with a pitch with two out in the second. After John Buck reached on an infield single, Bonifacio's single loaded the bases.

Johnson — who batted .085 last year — then lined a pitch over the second baseman, and two runs scored.

Stanton, dropped to sixth in the order because of an early-season slump, doubled to start the fourth and scored on Buck's double. Maholm came out of the game after walking Hanley Ramirez with the bases loaded to make it 4-0. Michael Crotta took the mound, and Sanchez blooped his first pitch for a two-run single.

NOTES: Marlins LF Logan Morrison left the game in the fifth inning with a strained arch in his left foot. He wore a boot afterward but said he hopes to be back in the lineup within a couple of days. ... Slumping Pirates 3B Pedro Alvarez, who was given the night off Monday, was back in the lineup and went 0 for 3 with two strikeouts. ... The Marlins, who went 34-15 against lefties last year, improved to 2-4 against them this year.