Wonder about Plutus validator's Datum arg format and Datum's max size?

We know there are 3 argument for plutus validator ( Doc: Writing basic validator scripts — Plutus 1.0.0 documentation )
But there is no detail info about validator, redeemer arguments format.

I guess that both datum and redeemer any be any JSON value, but not for sure, because haven’t tried it or read any demo case of complex value for datum/redeemer.
Does my guess correct?
If yes, then, does is have byte length limitation? Or any way, what is the max byte length.
Any replay is welcome, include reference link.

Thanks.