def METHOD_NAME(value, context):
    '''Return a parsed JSON object when applicable, a unicode string when not.
    dicts and None will be returned untouched; otherwise return a JSON object
    if the value can be parsed as such. Return unicode(value) in all other
    cases.
    '''
    try:
        if value is None:
            return value
        v = json_validator(value, context)
        # json.loads will parse literals; however we want literals as unicode.
        if not isinstance(v, dict):
            return text_type(value)
        else:
            return v
    except df.Invalid:
        return text_type(value)