this could be generalized slightly further as ``from_json`` could be expressed as a wrapper to a ``from_dict`` method