import collections

def canonicalize(json_obj):
  """This function canonicalizes a Python object that will be serialized as JSON.

  Args:
    json_obj (object): the Python object that will later be serialized as JSON.

  Returns:
    object: json_obj now sorted to its canonical form.

  """
  if isinstance(json_obj, collections.MutableMapping):
    sorted_obj = sorted({key: canonicalize(val) for key, val in json_obj.items()}.items())
    return collections.OrderedDict(sorted_obj)
  elif isinstance(json_obj, (list, tuple)):
    return [canonicalize(val) for val in json_obj]
  return json_obj