44from __future__ import annotations
55
66
7- __all__ = ['walk' , 'globtastic' , 'maybe_open' , 'image_size' , 'bunzip' , 'loads' , 'loads_multi' , 'untar_dir' ,
7+ __all__ = ['walk' , 'globtastic' , 'maybe_open' , 'image_size' , 'bunzip' , 'loads' , 'loads_multi' , 'dumps' , ' untar_dir' ,
88 'repo_details' , 'run' , 'open_file' , 'save_pickle' , 'load_pickle' , 'dict2obj' , 'obj2dict' , 'repr_dict' ,
99 'is_listy' , 'mapped' , 'IterLen' , 'ReindexCollection' , 'get_source_link' , 'truncstr' , 'spark_chars' ,
1010 'sparkline' , 'modify_exception' , 'round_multiple' , 'str2bool' , 'set_num_threads' , 'join_path_file' ,
@@ -113,13 +113,12 @@ def bunzip(fn):
113113 for d in iter (lambda : src .read (1024 * 1024 ), b'' ): dst .write (d )
114114
115115# Cell
116- def loads (s , cls = None , object_hook = None , parse_float = None ,
117- parse_int = None , parse_constant = None , object_pairs_hook = None , ** kw ):
116+ def loads (s , ** kw ):
118117 "Same as `json.loads`, but handles `None`"
119118 if not s : return {}
120- import json
121- return json . loads ( s , cls = cls , object_hook = object_hook , parse_float = parse_float ,
122- parse_int = parse_int , parse_constant = parse_constant , object_pairs_hook = object_pairs_hook , ** kw )
119+ try : import ujson as json
120+ except ModuleNotFoundError : import json
121+ return json . loads ( s , ** kw )
123122
124123# Cell
125124def loads_multi (s :str ):
@@ -133,6 +132,14 @@ def loads_multi(s:str):
133132 yield obj
134133 s = s [pos :]
135134
135+ # Cell
136+ def dumps (obj , ** kw ):
137+ "Same as `json.dumps`, but uses `ujson` if available"
138+ try : import ujson as json
139+ except ModuleNotFoundError : import json
140+ else : kw ['escape_forward_slashes' ]= False
141+ return json .dumps (obj , ** kw )
142+
136143# Cell
137144def _unpack (fname , out ):
138145 import shutil
0 commit comments