There’s always a character limit, but option_value
is LONGTEXT so unless you anticipate more than 4GB of data you should be fine.
I’d suggest json is unnecessary – you can save a PHP array as the value and it will be serialized/deserialized automatically.
That said, as Tom points out, this is really micro-optimising, and won’t really impact performance either way in the real world. If you want to keep your settings together for organizational/clarity reasons though, go ahead.