BUG: since pandas==1.1.0 pd.read_json() fails for strings that look similar to fsspec_url · Issue #36271 · pandas-dev/pandas (original) (raw)

Input json string: [{"0":"this is a string ://"}]
URL? False
fsspec? True
---------------------------------------------------------------------------

ImportError                               Traceback (most recent call last)

<ipython-input-1-f3bc94ba133f> in <module>
      7 print('fsspec? {}'.format(str(pd.io.common.is_fsspec_url(input_json))))
      8 
----> 9 pd.read_json(input_json)

~/miniconda3/envs/eltest/lib/python3.7/site-packages/pandas/util/_decorators.py in wrapper(*args, **kwargs)
    197                 else:
    198                     kwargs[new_arg_name] = new_arg_value
--> 199             return func(*args, **kwargs)
    200 
    201         return cast(F, wrapper)

~/miniconda3/envs/eltest/lib/python3.7/site-packages/pandas/util/_decorators.py in wrapper(*args, **kwargs)
    294                 )
    295                 warnings.warn(msg, FutureWarning, stacklevel=stacklevel)
--> 296             return func(*args, **kwargs)
    297 
    298         return wrapper

~/miniconda3/envs/eltest/lib/python3.7/site-packages/pandas/io/json/_json.py in read_json(path_or_buf, orient, typ, dtype, convert_axes, convert_dates, keep_default_dates, numpy, precise_float, date_unit, encoding, lines, chunksize, compression, nrows)
    592     compression = infer_compression(path_or_buf, compression)
    593     filepath_or_buffer, _, compression, should_close = get_filepath_or_buffer(
--> 594         path_or_buf, encoding=encoding, compression=compression
    595     )
    596 

~/miniconda3/envs/eltest/lib/python3.7/site-packages/pandas/io/common.py in get_filepath_or_buffer(filepath_or_buffer, encoding, compression, mode, storage_options)
    201         if filepath_or_buffer.startswith("s3n://"):
    202             filepath_or_buffer = filepath_or_buffer.replace("s3n://", "s3://")
--> 203         fsspec = import_optional_dependency("fsspec")
    204 
    205         # If botocore is installed we fallback to reading with anon=True

~/miniconda3/envs/eltest/lib/python3.7/site-packages/pandas/compat/_optional.py in import_optional_dependency(name, extra, raise_on_missing, on_version)
    108     except ImportError:
    109         if raise_on_missing:
--> 110             raise ImportError(msg) from None
    111         else:
    112             return None

ImportError: Missing optional dependency 'fsspec'.  Use pip or conda to install fsspec.

The method pd.read_json() is widely used and accepts either a path or a json string. Since pandas==1.1.0 passing a string containing a json input is often interpreted as a fssspec_url and results in an error.

Input json string: [{"0":"this is a string ://"}]
URL? False
fsspec? False
                       0
0  this is a string ://