Skip to content

to_dict() method chokes on standard json.dumps() kwargs  #490

Open
@droneshire

Description

@droneshire

Describe the bug
Exception is thrown when using the sort_keys=True kwarg when using the to_json() method of a deepdiff.Deepdiff() object.

The bug is in the serialization.py code if orjson is defined/used:

def json_dumps(item, default_mapping=None, **kwargs):
    """
    Dump json with extra details that are not normally json serializable
    """
    if orjson:
        indent = kwargs.pop('indent', None)
        sort_keys = kwargs.pop('sort_keys', None)
        if indent:
            kwargs['option'] = orjson.OPT_INDENT_2
        return orjson.dumps(
                item,
                default=json_convertor_default(default_mapping=default_mapping),
                **kwargs).decode(encoding='utf-8')
    else:
        return json.dumps(
            item,
            default=json_convertor_default(default_mapping=default_mapping),
            **kwargs)

The fix would seem to be to handle all of the supported kwargs and translate them to their respective orjson opt. I.e. add in the following lines:

        if sort_keys:
            kwargs['sort_keys'] = orjson.OPT_SORT_KEYS
        ... etc

To Reproduce

NOTE: Need the orjson import to be defined (I'm not sure what allows this to happen, but the bug is hidden behind the if orjson: conditional

Otherwise can just do the following:

diff = deepdiff.DeepDiff(dict1, dict2)
if diff:
    diff.to_json(indent=4, sort_keys=True)

Expected behavior

diff.to_json() should not choke on standard json.dumps() kwargs (e.g. sort_keys)

OS, DeepDiff version and Python version (please complete the following information):

  • OS: Ubuntu
  • Version: Noble
  • Python Version: 3.11
  • DeepDiff Version deepdiff==7.0.1

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions