Johnson scored twice and made another as the Eagles hit back from a half-time deficit.
Palace made a bright start and Johnson twice and Neil Shipperley went close for the visitors.
Shefki Kuqi volleyed over for Town before the hosts went ahead on 11 minutes, Jermaine Wright volleying in a low drive from a Jim Magilton corner.
Kuqi shot wide again before Ian Westlake saw a low 20-yarder well held by Thomas Myhre.
Kelvin Davis did well to block a Johnson close-range shot before Michael Hughes fired over after Chris Bart-Williams carelessly lost possession.
The half then lost impetus before a rousing finale saw Magilton's volley well held by Myhre, before Matt Richards did well to clear a dangerous low Johnson cross.
Westlake fired a good early chance wide after the break, before Myhre saved to deny Wright and Pablo Counago.
Against the run of play Palace levelled on the hour, Julian Gray crossing to Johnson to turn and fire low beyond Davis.
Westlake fired another good chance wide before Palace scored again after a terrible error by Richards.
His weak back header was collected by Johnson, who beat keeper Davis and crossed low into the six-yard box where Richard Naylor failed to clear, leaving Gray with a tap-in.
Kit Symons saw a header cleared off the line and then Davis saved a firm Shipperley effort.
Myhre beat away a ferocious free-kick from sub Martijn Reuser on 80 minutes and that proved to be Town's last chance.
Palace added to their lead with four minutes to go when Fabian Wilnis lost the ball to Gray and, although Davis pulled off an excellent save to deny his drive, the ball fell perfectly for Johnson to sidefoot home.