The Braves had 13 hits going into the ninth, but had only scored three runs. That all changed in the final inning when Danville parlayed four hits into four runs.
Trying to answer in the bottom of the ninth, Johnson City had runners on first and second base with just one out and the tying run at the plate. But the Cardinals had a 4-3 fielder's choice and a strikeout in their final two at-bats.
"It's hard, but it's baseball," Cardinals manager Roberto Espinoza said. "We had one ball get past the first-base line, and that's tough. We had the tying run at the plate and we competed. When those guys battle and give you that kind of effort, all you can do is keep going."
Danville improved to 20-17 as it tries to keep pace with Princeton and Bluefield in the Appalachian League East Division. Johnson City fell to 16-20, a full seven games behind Elizabethton in the West Division standings.
Johnson City starter Kyle Leahy had five strikeouts in five innings and gave up three runs (only two earned) on 10 hits. Jacob Sylvester threw the next couple of innings before giving way to Michael Brettell, who had a blown save.
Enrique Perez (0-3) was charged with the loss before Juan Alvarez closed out the game.
Leandro Cedeno led Johnson City at the plate. The first baseman went 3-for-4 with an RBI and two runs scored.
Five others — Jonatan Machado, Nolan Gorman, Brandon Riley, Carlos Soto Jr. and Donivan Williams — each had one hit. Gorman starred in the field, spearheading three double plays.
"We are really impressed with this kid," Espinoza said of Gorman. "He's showing a lot of ability, defensively and offensively. Today, he had a couple of really good plays at third base."
Justin Dean, Brett Langhorne and Griffen Benson each had three hits for the Braves, who got two hits apiece from Andrew Moritz, Greg Cullen and Henry Quintero.
Cullen doubled on a line drive to center field for a 1-0 Danville lead in the top of the first. Johnson City responded the following inning with an RBI double by Soto to score Cedeno.
Cullen had a sacrifice fly for his second RBI in the top of the third. Benson then hit a solo home run in the top of the fourth, and the Braves led 3-1.
Soto matched Cullen again with his own sacrifice fly in the bottom of the fourth to pull the Cardinals within a run.
Cedeno and Riley each had RBI singles to left field in the fifth inning to put Johnson City ahead 4-3 for its first lead.
Johnson City, which lost 7-5 Friday night, will try to get its first win in the three-game series Sunday, with first pitch scheduled for 5 p.m. Colin Schmid (1-0) is slated to start for the Cardinals.