"When you have those two horses going, you know it's a battle because you're going to have to scratch and claw for every run," said Chris Coghlan, who had the game-winning RBI.
Johnson didn't get the win. But he kept his team in the game against the reigning NL Cy Young Award winner, pitching seven innings and allowing only one run -- on Ryan Howard's eighth homer leading off the second. He pitched out of bases-loaded jams in both the second and third.
|More on Phillies at Marlins|
"It seemed like I kept getting behind guys," Johnson said. "You've got to find a way to battle."
Coghlan's single in the eighth drove home the tiebreaking run, which was unearned following an error by shortstop Jimmy Rollins.
Halladay (5-2) gave up only five hits in eight innings, but fell to 1-3 in his four matchups against Johnson.
"I'm kind of hoping he goes and plays somewhere else," Halladay said.
The loss ended Halladay's streak of wins in 13 consecutive starts against NL East teams since July 5, 2010.
He was pitching in Miami for the first time since last May 29, when he threw his perfect game. Johnson was the losing pitcher that night.
The rematch drew an announced crowd of 21,955, including a large walk-up turnout.
"This game came as advertised," Marlins manager Edwin Rodriguez said. "I think the fans had a lot of fun."
When Halladay walked Johnson on a 3-2 pitch to start the third, it led to the tying run. The walk was only the eighth issued by Halladay all season.
"A great at-bat -- one of the best at-bats in the game," Rodriguez said. "J.J. should be very proud of that."
"The walk definitely cost me," Halladay said. "You can't afford to do that. I was definitely not thrilled about it."
Johnson sprinted to third on a double by Coghlan and scored on Emilio Bonifacio's sacrifice fly.
The Phillies lost for only the fourth time in their past 22 games in Miami. Florida closed to within two games of the NL East leaders with the final game of the three-game series Wednesday.
"It's big because we can win the series," Johnson said. "It's not any bigger than that. We're not going to say it's steppingstone to anything."
The Marlins, whose 21-14 start matches the best in franchise history, came from behind to win for the 12th time, second-most in the majors. Mistakes and squandered chances hurt the Phils, who stranded 10 runners and went 0 for 6 with runners in scoring position.
Rollins bobbled a grounder by Omar Infante for an error to start the bottom of the eighth. That ended a streak of 13 consecutive batters retired by Halladay.
"With those two pitchers, the team is waiting for any advantage, any edge," Rodriguez said. "That's what happened."
When Halladay threw his first wild pitch of the season, Infante took second. He advanced to third on a groundout and came home on Coghlan's hit.
Philadelphia had seven baserunners in the first three innings, but only one scored. With the Marlins aligned in a shift, Howard went the other way on a 3-1 fastball and homered to left.
"I made a terrible pitch to Howard and paid for it," Johnson said. "That's what he's good at."
The Phils went on to load the bases that inning, before Johnson struck out Dane Sardinha and Halladay and retired Rollins on a groundout.
"You have a guy on the ropes," Rollins said. "That would have been a good way to blow the game open. We didn't take advantage."
- Philadelphia 2B Chase Utley (right knee) began a rehabilitation assignment Tuesday with Single-A Clearwater.
- Phillies RHP Joe Blanton , who came off the disabled list Monday and pitched five innings in a win over Florida, complained of some soreness in his throwing elbow but is scheduled for a bullpen session Wednesday.
- Phillies RHP Roy Oswalt (back), who is on the disabled list, threw a bullpen session and is expected to make a rehabilitation start Thursday for Clearwater.
- Marlins RHP Edward Mujica , carted off the field Monday with a strained left knee, said the injury was not nearly as serious as he first feared. He hopes to be available Friday.
- Johnson had his first hit batter and first intentional walk of the season.