Decodes a JSON object specified in the utool convention

    Args:
        json_str (str):
        allow_pickle (bool): (default = False)

    Returns:
        object: val

    CommandLine:
        python -m utool.util_cache from_json --show

    Example:
        >>> # ENABLE_DOCTEST
        >>> from utool.util_cache import *  # NOQA
        >>> import utool as ut
        >>> json_str = 'just a normal string'
        >>> json_str = '["just a normal string"]'
        >>> allow_pickle = False
        >>> val = from_json(json_str, allow_pickle)
        >>> result = ('val = %s' % (ut.repr2(val),))
        >>> print(result)

def from_json(json_str, allow_pickle=False):
    """
    Decodes a JSON object specified in the utool convention

    Args:
        json_str (str):
        allow_pickle (bool): (default = False)

    Returns:
        object: val

    CommandLine:
        python -m utool.util_cache from_json --show

    Example:
        >>> # ENABLE_DOCTEST
        >>> from utool.util_cache import *  # NOQA
        >>> import utool as ut
        >>> json_str = 'just a normal string'
        >>> json_str = '["just a normal string"]'
        >>> allow_pickle = False
        >>> val = from_json(json_str, allow_pickle)
        >>> result = ('val = %s' % (ut.repr2(val),))
        >>> print(result)
    """
    if six.PY3:
        if isinstance(json_str, bytes):
            json_str = json_str.decode('utf-8')
    UtoolJSONEncoder = make_utool_json_encoder(allow_pickle)
    object_hook = UtoolJSONEncoder._json_object_hook
    val = json.loads(json_str, object_hook=object_hook)
    return val