When I try to fill the struct with data, the code crashes.
The source of the data causing the issue are Strings. I know it's bad, but the ArduinoJson library works with Strings.
If I use Strings in the struct instead of char arrays, it works flawlessly. But the problem is that I need to store this struct into an EEPROM later, so it has to be fixed sized char arrays (I assume).
Consider storing the entire JSON payload. It will probably take more space because it stores the punctuation and field names. But you have more flexibility because none of the field sizes are fixed. Space you save on shorter values is available to others. And your code might be simpler: read it back into a JsonDocument and use it. No need for a separate struct and copying into it.