With mORMot you can write it as follows:
ShowMessage(Utf8ToString(VariantSaveJson(
_Obj(['registration_ids', _Arr(['crX7c-...']), 'notification', _Obj(['title', 'Hi', 'body', 'Notification test'])]))));
The function _Obj() uses name-value pairs. The description of _Obj() can be found in the help here and for _Arr() here. Information about TDocVariant documents can be found here.
With best regards
Thomas