Accessing structures concurrently modified by ISR
Use the DMA for the UART to move the data into a memory buffer and parse from there, and check that you don't outrun the DMA while parsing. I would not parse in an interrupt.

Then have two copies of the object and three flags: one to indicate most updated copy which the application should read from on its next read, and two to indicate that the application is currently reading from a copy and which copy it is reading from.

That way if the parser is done updating the shadow copy, it won't proceed to update and modify the other (now old) copy if it is currently in the middle of being read by the application. Combined with the UART DMA, you won't lose incoming data, so the parser can just wait for the application to finish its read and release the now old copy before trying to update it. You could parse in an interrupt in this way, but now there is also no reason to (at least for not missing incoming data) due to the DMA.

The DMA could be substituted with interrupts to receive data and write to a memory buffer, but not parse.