James added nine rebounds and seven assists for the Eastern Conference-leading Heat, who won their fourth straight game and next play on Christmas against Oklahoma City in a rematch of last season's NBA Finals. Shane Battier scored 15 and Ray Allen added 13 for Miami, which opened the second half on a 22-6 run to build a 69-49 lead.
Marvin Williams scored 16 for Utah, which got 15 from Gordon Hayward and 11 from Paul Millsap.
The Jazz played the second half without Mo Williams, who appeared to hurt his right thumb. Miami was without Chris Bosh, home with what the team said was a cold.
James has scored at least 20 points in all 24 Heat games this season, matching the longest run of 20-or-more efforts to start a year since Karl Malone did it for Utah in the 1989-90 campaign.
Maybe it was fitting that James tied Malone's mark in a game against the Jazz.
"Karl Malone's a great player," James said before the game. "Awesome player, by the way."
It also was the 29th straight regular-season game in which James scored at least 20 points and 45th consecutive overall.
That is just one of two streaks James has going.
He also didn't get called for a personal foul for a sixth straight game. James' most recent foul was an offensive call against New Orleans on Dec. 8. He has played 250 minutes, 4 seconds without being whistled for a personal foul, though he was hit with a technical for arguing a no-call late in the first half on Saturday.
"I'd be concerned if he was just standing around, if he was hiding and taking himself out of plays and taking mini-vacations on possessions," Heat coach Erik Spoelstra said. "But he's been activating our defense. And when you have his type of athletic, God-given ability and you add that to his mind and then the preparation, he can be one or two steps ahead of the play -- which allows him to be a playmaker defensively."
As usual, he was a playmaker offensively, as well.
Miami scored the first eight points of the second half to finally create some breathing room. James started the half by making a jumper, then set up Battier -- who started in place of Bosh -- for a 3-pointer. Battier then made another 3 off an assist from Wade to give Miami a 55-43 edge by the time the third quarter was 90 seconds old.
The margin eventually grew to 20, but Utah wasn't done.
The Jazz cut the deficit by the end of the third, getting within 73-63, and the Heat lead was only eight after a free throw by Millsap with 4:40 remaining.
That would be the end of the drama.
James drove the lane for a left-handed layup with 3:55 left to put Miami back up by 12, and after a Utah turnover on the ensuing possession, Allen hit a 3-pointer from the left corner for a 97-82 lead.
Neither team led by more than six in the first half, one that ended with the Heat holding a 47-43 edge.
The NBA's new 90-second pregame countdown clock also played a bit of a role down the stretch.
The Heat were called for a delay-of-game technical with 8:24 remaining, in part because the team wasn't fully ready to go when the countdown-to-tipoff expired. That led to the team's first delay warning of the night, and the second came after Norris Cole scored on a reverse layup and then knocked the ball out of the hands of Utah forward Derrick Favors as he prepared to throw an inbounds pass.
The Jazz wrap up their annual pre-Christmas road trip Sunday night in Orlando.