Michael Russell drove in three runs for the No. 1-seeded Tar Heels (59-11), the first on a sacrifice fly that resulted in a close play at the plate to open the scoring in the fourth inning.
Johnson allowed five singles, walked two and struck out six before leaving with one out in the ninth.
NC State's Carlos Rodon started on three days rest after throwing 108 pitches in an 8-1 win over Carolina. He gave up two runs on four hits in his five innings.
Carolina must beat UCLA twice - first on Friday and again Saturday - to reach the finals. North Carolina State (50-16), in the CWS for the first time since 1968, was shut out for the first time this season.
Atlantic Coast Conference player of the year Colin Moran had three singles, reached base four times and drove in two runs for Carolina.
Johnson (5-1), a 14th-round draft pick of the Milwaukee Brewers, bounced back from a dismal start in the super regionals against South Carolina. He lasted just 1 2-3 innings and gave up five runs in an 8-0 loss that day.
But he had turned in a strong start the last time he faced the Wolfpack, and he did again Thursday in the fifth meeting of the teams this season. He relied on a fastball that reached the low 90s to keep the Wolfpack in check. He got an assist from a 22-mph wind blowing in at a ballpark that has surrendered only two home runs through 10 CWS games.
Rodon (10-2), projected as the possible No. 1 pick in next year's draft, was a surprise starter for the Wolfpack.
NC State coach Elliott Avent originally planned to go with Brad Stone. Rodon was scheduled to throw an extended bullpen session Thursday, but Avent and pitching coach Tom Holliday scrapped it and decided to go with Rodon and give him a 75-pitch count that stretched to 80.
Rodon, who held the Tar Heels hitless into the fifth inning on Sunday, had his fastball humming in the mid-90s but wasn't nearly as dominating as he was Sunday.
The Tar Heels had runners in scoring position in the first and third innings but didn't break through until Russell's bases-loaded sacrifice fly in the fourth. NC State right fielder Jake Fincher made a perfect throw home, but the headfirst-sliding Brian Holberton touched the plate with his right hand just ahead of catcher Brett Austin's tag.
Austin bounced his mask off the ground and Rodon, backing up on the play, threw his glove in the dirt as Avent bolted out of the dugout to confront umpire Joe Burleson. TV replays appeared to support Burleson's call.
Burleson, wearing a television microphone, told Avent that Holberton beat the tag.
"You really believe that, Joe?" Avent asked.
"I do," Burleson said before warning Avent he would eject him if he didn't quit following him.
Rodon caused some of his own problems in the fourth. Colin Moran singled leading off and was safe at second when Rodon bounced a throw into center field as he tried to get Moran on Holberton's bunt. He walked Cody Stubbs to load the bases with none out.
Moran was forced out at home on Skye Bolt's grounder to third, and then Russell delivered his sacrifice fly.
Rodon hit Parks Jordan leading off the fifth, and Moran's two-out single to center brought him home. Moran became the first Atlantic Coast Conference player to drive in 90 runs in a season since Florida State's Buster Posey in 2008.
The Tar Heels broke open the game in the four-run eighth, with Russell singling in two runs and Mike Zolk doubling in two more.