Justin Ruggiano tied a career high with three hits and drove in two runs for Miami, which last won consecutive games June 2-3 at Philadelphia. The Marlins were 4-17 since.
Johnson (5-5) allowed one run and struck out six, improving to 5-2 with a 2.91 ERA in his last 10 starts.
Lee (0-5) allowed six runs in 4 2/3 innings, falling to 0-2 with a 7.30 ERA in his last four starts.
Hunter Pence homered for the Phillies, who played for the first time at the new Marlins Park.
It was Ruggiano's first three-hit game since June 12, 2011, at Baltimore while with Tampa Bay, and the third of his career.
Jose Reyes doubled to lead off the bottom of the first inning for the Marlins and scored on a groundout by Logan Morrison.
The Marlins strung together four straight hits in the third including an RBI single by Giancarlo Stanton. Omar Infante's sacrifice fly pushed the lead to 3-0.
Pence cut the deficit to 3-1 with his 15th homer over the right-field fence.
Ruggiano's two-run double followed by John Buck's RBI single ended Lee's outing.
Pence added an RBI single in the ninth.
NOTES: Ruggiano leads the Marlins with a .396 batting average (19 for 48) in June. ... Phillies 1B Ryan Howard (left Achilles) played in his first rehab game on Thursday with Single-A Lakewood and went 2 for 4 with three RBIs. ... Philadelphia will send LHP Cole Hamels (10-3, 3.03 ERA) to the mound on Saturday to face Marlins LHP Mark Buehrle (6-8, 3.55 ERA), who is 3-2 in five starts against the Phillies. Hamels is 6-9 in 21 starts against Miami.