Updated

The Miami Marlins will be thrilled if Josh Johnson is as effective on opening day against the St. Louis Cardinals as he was in these two spring starts.

Johnson struck out three and allowed one hit over 2 1-3 scoreless innings Saturday in a 3-1 win over the Cardinals.

The Marlins ace walked two and threw 52 pitches, 32 for strikes. He faced the Cardinals in his first start on Monday, allowing two hits in 1 2-3 scoreless innings.

"I got into a lot of deep counts. Not what I wanted to do, but I felt good out there. That was the main thing," said Johnson, limited to nine starts last year because of shoulder issues that ended his season in May.

He threw mainly fastballs in his latest start, topping out at 95 mph. He said he also mixed in a few curveballs and about six to eight sliders, including one that David Freese swung at and missed to end the first inning.

"Mainly the fastball. We don't want to show too much, especially since we're facing them in three weeks", Johnson said.

Johnson is in line to start the season opener against the Cardinals at new Marlins Park in Miami on April 4.

Manager Ozzie Guillen said he has been pleased with Johnson's progress. But the bigger test will be how Johnson feels the day after each start this spring.

"The next day is when you start to get sore. That's what I worry about the most but he said he feels fine. He's pitching pain free. He looked pretty good," Guillen said.

"This guy is a big piece of the puzzle to help us compete and get to where we want to get," he said.

Omar Infante homered for the Marlins off Kyle Lohse, who allowed a run on two hits in three innings.

Marlins shortstop Jose Reyes, making a second straight start, went 1 for 2. He made a nice play to end the third, grabbing a hard grounder by Lance Berkman that bounced off third baseman Donnie Murphy and throwing to first.

The Marlins on Sunday play the Mets for the third time in five days, but Reyes is not on the travel roster to Port St. Lucie. He has not played his former team yet this spring.

"I have to worry about this organization," said Reyes, who said the Marlins, not him, decided against putting him on the travel roster. "If they don't put me in the lineup (Sunday), it's not a big deal."

The Marlins play the Mets two more times this spring, in Jupiter on March 15 and March 31.

NOTES: There was a 1-hour, 49-minute rain delay in the top of the fifth inning.