Chopra struck in the 42nd and 90th minutes after Andrea Orlandi had opened the scoring for the Swans in the 28th minute.
Anthony Gerrard and Darcy Blake passed late fitness tests to take their places at the centre of the Bluebirds defence while Joe Ledley was a shock inclusion on the subs bench.
The Swans had Gorka Pintado up front for Shefki Kuqi while Cardiff-born David Cotterill was on the bench.
In a pulsating opening ten minutes, Ross McCormack fired wide with Swans keeper Dorus de Vries out of position while at the other end, Darren Pratley ran at the Cardiff defence before Stephen McPhail managed to get a blocking tackle in on the midfielder.
The Swans took the lead in the 28th minute from their second corner taken by Orlandi. Ashley Williams went up with Marshall and the keeper got a slight touch before the ball landed in the back of the net.
Four minutes before the break, Cedric van der Gun found himself free in front of goal but fired straight at Marshall.
A minute later, Cardiff equalised when Jay Bothroyd managed to get his head to a deep cross from Adam Matthews and Chopra nipped in to beat three Swansea defenders before clipping the ball into the roof of the net.
The Swans forced two quick corners at the start of the second half and David Edgar went close with a snap-shot that had Marshall scrambling to his left.
Ledley replaced Gavin Rae in the 63rd minute for his first appearance since operations on both hips earlier in the year.
Kuqi made an instant impact when he came on for Pintado by rolling the ball across the danger area but no Swan was on hand to take advantage.
Marshall made a brilliant stop with his legs from a close-range Kuqi shot in the final minute but the Bluebirds went up the other end and from Matthews' long throw, Chopra raced in to shoot into the corner of the net for the winner in time added on.
External Reports
Urban 75
Wales On Sunday
Swansea Official website
Cardiff Official website