|
import json |
|
import os |
|
import io |
|
|
|
|
|
|
|
def _make_r_io_base(f, mode: str): |
|
if not isinstance(f, io.IOBase): |
|
f = open(f, mode=mode) |
|
return f |
|
|
|
def jload(f, mode="r"): |
|
"""Load a .json file into a dictionary.""" |
|
f = _make_r_io_base(f, mode) |
|
jdict = json.load(f) |
|
f.close() |
|
return jdict |
|
|
|
|
|
def jdump(obj, f, mode="w", indent=4, default=str): |
|
"""Dump a str or dictionary to a file in json format. |
|
|
|
Args: |
|
obj: An object to be written. |
|
f: A string path to the location on disk. |
|
mode: Mode for opening the file. |
|
indent: Indent for storing json dictionaries. |
|
default: A function to handle non-serializable entries; defaults to `str`. |
|
""" |
|
if not isinstance(f, io.IOBase): |
|
f_dirname = os.path.dirname(f) |
|
if f_dirname != "": |
|
makedirs(f_dirname) |
|
f = open(f, mode=mode) |
|
if isinstance(obj, (dict, list)): |
|
json.dump(obj, f, indent=indent, default=default) |
|
elif isinstance(obj, str): |
|
f.write(obj) |
|
else: |
|
raise ValueError(f"Unexpected type: {type(obj)}") |
|
f.close() |
|
|
|
def jdumps(obj, indent=4, default=str): |
|
return json.dumps(obj, indent=indent, default=default) |
|
|