@@ -179,7 +179,7 @@ def from_json_pickle(cls, value):
179179        else :
180180            logger .error ('jsonpickle library needs to be installed in order to run from_json_pickle' )  # pragma: no cover. Json pickle is getting deprecated. 
181181
182-     def  to_json (self , default_mapping = None , ** kwargs ):
182+     def  to_json (self , default_mapping :  dict   |   None = None ,  force_use_builtin_json = False , ** kwargs ):
183183        """ 
184184        Dump json of the text view. 
185185        **Parameters** 
@@ -190,6 +190,11 @@ def to_json(self, default_mapping=None, **kwargs):
190190        If you have a certain object type that the json serializer can not serialize it, please pass the appropriate type 
191191        conversion through this dictionary. 
192192
193+         force_use_builtin_json: Boolean, default = False 
194+             When True, we use Python's builtin Json library for serialization, 
195+             even if Orjson is installed. 
196+ 
197+ 
193198        kwargs: Any other kwargs you pass will be passed on to Python's json.dumps() 
194199
195200        **Example** 
@@ -212,7 +217,12 @@ def to_json(self, default_mapping=None, **kwargs):
212217            '{"type_changes": {"root": {"old_type": "A", "new_type": "B", "old_value": "obj A", "new_value": "obj B"}}}' 
213218        """ 
214219        dic  =  self .to_dict (view_override = TEXT_VIEW )
215-         return  json_dumps (dic , default_mapping = default_mapping , ** kwargs )
220+         return  json_dumps (
221+             dic ,
222+             default_mapping = default_mapping ,
223+             force_use_builtin_json = force_use_builtin_json ,
224+             ** kwargs ,
225+         )
216226
217227    def  to_dict (self , view_override = None ):
218228        """ 
@@ -637,14 +647,26 @@ def object_hook(self, obj):
637647        return  obj 
638648
639649
640- def  json_dumps (item , default_mapping = None , ** kwargs ):
650+ def  json_dumps (item , default_mapping = None , force_use_builtin_json :  bool = False ,  ** kwargs ):
641651    """ 
642652    Dump json with extra details that are not normally json serializable 
653+ 
654+     parameters 
655+     ---------- 
656+ 
657+     force_use_builtin_json: Boolean, default = False 
658+         When True, we use Python's builtin Json library for serialization, 
659+         even if Orjson is installed. 
643660    """ 
644-     if  orjson :
661+     if  orjson   and   not   force_use_builtin_json :
645662        indent  =  kwargs .pop ('indent' , None )
646663        if  indent :
647664            kwargs ['option' ] =  orjson .OPT_INDENT_2 
665+         if  'sort_keys'  in  kwargs :
666+             raise  TypeError (
667+                 "orjson does not accept the sort_keys parameter. " 
668+                 "If you need to pass sort_keys, set force_use_builtin_json=True " 
669+                 "to use Python's built-in json library instead of orjson." )
648670        return  orjson .dumps (
649671            item ,
650672            default = json_convertor_default (default_mapping = default_mapping ),
0 commit comments