Check out this python library jsondiff , that will help you to identify the diff's

import json

import jsondiff

json1 = json.loads(
    '{"isDynamic": false, "name": "", "value": "SID:<sid>", "description": "instance","argsOrder": 1,"isMultiSelect": false}')

json2 = json.loads(
    '{ "name": "", "value": "SID:<sid>","isDynamic": false, "description": "instance","argsOrder": 1,"isMultiSelect": false}')

res = jsondiff.diff(json1, json2)
if res:
    print("Diff found")
else:
    print("Same")
Answer from Jenish on Stack Overflow
🌐
GitHub
github.com › xlwings › jsondiff
GitHub - xlwings/jsondiff: Diff JSON and JSON-like structures in Python · GitHub
$ jdiff a.json b.json -i 2 $ jdiff a.json b.json -i 2 -s symmetric $ jdiff a.yaml b.yaml -f yaml -s symmetric · Install development dependencies and test locally with · pip install -r requirements-dev.txt # ... do your work ... add tests ... pytest ... This will install the library and cli for jsondiff as well as its runtime dependencies.
Starred by 746 users
Forked by 89 users
Languages   Python
🌐
PyPI
pypi.org › project › jsondiff
jsondiff · PyPI
>>> diff({'a': [0, {'b': 4}, 1]}, {'a': [0, {'b': 5}, 1]}) {'a': {1: {'b': 5}}} # You can exclude some jsonpaths from the diff (doesn't work if the value types are different) >>> diff({'a': 1, 'b': {'b1': 20, 'b2': 21}, 'c': 3}, {'a': 1, 'b': {'b1': 22, 'b2': 23}, 'c': 30}, exclude_paths=['b.b1', 'c']) {'b': {'b2': 23}} # ...but similarity is taken into account >>> diff({'a': [0, {'b': 4}, 1]}, {'a': [0, {'c': 5}, 1]}) {'a': {insert: [(1, {'c': 5})], delete: [1]}} # Support for various diff syntaxes >>> diff({'a': 1, 'b': 2}, {'b': 3, 'c': 4}, syntax='explicit') {insert: {'c': 4}, update: {'b'
      » pip install jsondiff
    
Published   Aug 29, 2024
Version   2.2.1
Discussions

Multilevel JSON diff in python - Stack Overflow
Please link me to answer if this has already been answered, my problem is i want to get diff of multilevel json which is unordered. More on stackoverflow.com
🌐 stackoverflow.com
Diff two large JSON array or objects
Yes Firstly you have to load json data in python dictionary using json module/package After that jsondiff module/package help you check different This module/package also compare list,set,etc.👌 If will return empty dictionary {} if there is no different👍 import jsondiff oldJson = {1:"a",2:"b",3:"c"} newJson = {1:1,4:4} r = jsondiff.diff(oldJson,newJson) if r : print(r) else: print("404,No Different Found!") Output: {1: 1, 4: 4, delete: [2, 3]} 😀 json.diff take 1st arg oldJson means from which we are checking different & 2nd newJson. There are 3 syntax 🎲 : compact ( default ) Any Change in Value of key & new insrted key will display normaly symmetric Inserted & delete show differently change show normally explicit 👀 It is detailed Inserted Deleted Changed Show differently import jsondiff oldJson = {1:"a",2:"b",3:"c"} newJson = {1:1,4:4} r = jsondiff.diff(oldJson,newJson,syntax="explicit") if r: print(r) else: print("404,No Different Found!") Output : {insert: {4: 4}, update: {1: 1}, delete: [2, 3]} 😃 Finally 🔥,Now you doubt about how to access them You can access them using symbols eg. r[jsondiff.symbols.insert] OR from jsondiff import symbols r[symbols.insert] There are some other symbols which use in different compare like list,set, etc Note : if you try using insert in compact & update in compact & symmetric then you will get KeyError 😔 because those not exist there import jsondiff from jsondiff import symbols oldJson = {1:"a",2:"b",3:"c"} newJson = {1:1,4:4} r = jsondiff.diff(oldJson,newJson,syntax="explicit") if r: print("Deleted keys are ",r[symbols.delete]) else: print("404,No Different Found!") Output : Deleted keys are [2, 3] 🥳 Thanks for reading 😂 More on reddit.com
🌐 r/learnpython
3
3
February 26, 2022
Comparing Two JSON Files For Differences
Few words... Pandas, dataframe... More on reddit.com
🌐 r/learnpython
13
1
August 29, 2022
Best way to diff two JSON files and write differences data to third file?
The difflib module is a python standard module that has methods to help compare data, such as context_diff() or ndiff(). More on reddit.com
🌐 r/learnpython
7
1
August 20, 2017
🌐
PyPI
pypi.org › project › json-diff
json-diff · PyPI
Compares two JSON files (http://json.org) and generates a new JSON file with the result.
      » pip install json-diff
    
Published   Aug 25, 2019
Version   1.5.0
Top answer
1 of 3
21

Check out this python library jsondiff , that will help you to identify the diff's

import json

import jsondiff

json1 = json.loads(
    '{"isDynamic": false, "name": "", "value": "SID:<sid>", "description": "instance","argsOrder": 1,"isMultiSelect": false}')

json2 = json.loads(
    '{ "name": "", "value": "SID:<sid>","isDynamic": false, "description": "instance","argsOrder": 1,"isMultiSelect": false}')

res = jsondiff.diff(json1, json2)
if res:
    print("Diff found")
else:
    print("Same")
2 of 3
6

UPDATED: See https://eggachecat.github.io/jycm-json-diff-viewer/ for a live demo! Now it has a JS-native implementation.

Affiliation: I am the author of this lib.

Yes! You can diff it with jycm which has a rendering tool out of the box.

It uses LCS, Edit distance and Kuhn–Munkres to diff arrays.

Here's an universal example with set in set and value changes in some set

from jycm.helper import make_ignore_order_func
from jycm.jycm import YouchamaJsonDiffer

left = {
    "set_in_set": [
        {
            "id": 1,
            "label": "label:1",
            "set": [
                1,
                5,
                3
            ]
        },
        {
            "id": 2,
            "label": "label:2",
            "set": [
                4,
                5,
                6
            ]
        }
    ]
}

right = {
    "set_in_set": [
        {
            "id": 2,
            "label": "label:2",
            "set": [
                6,
                5,
                4
            ]
        },
        {
            "id": 1,
            "label": "label:1111",
            "set": [
                3,
                2,
                1
            ]
        }
    ]
}

ycm = YouchamaJsonDiffer(left, right, ignore_order_func=make_ignore_order_func([
    "^set_in_set$",
    "^set_in_set->\\[\\d+\\]->set$"
]))

ycm.diff()

expected = {
    'list:add': [
        {'left': '__NON_EXIST__', 'right': 2, 'left_path': '', 'right_path': 'set_in_set->[1]->set->[1]'}
    ],
    'list:remove': [
        {'left': 5, 'right': '__NON_EXIST__', 'left_path': 'set_in_set->[0]->set->[1]', 'right_path': ''}
    ],
    'value_changes': [
        {'left': 'label:1', 'right': 'label:1111', 'left_path': 'set_in_set->[0]->label',
         'right_path': 'set_in_set->[1]->label', 'old': 'label:1', 'new': 'label:1111'}
    ]
}

assert ycm.to_dict(no_pairs=True) == expected

you can set no_pairs=False to get the all pairs. Here's a rendered example:

As for the example here, you can use it as:

from jycm.helper import make_ignore_order_func
from jycm.jycm import YouchamaJsonDiffer

left = {
    "data": [{"x": 1, "y": 2}, {"x": 3, "y": 4}]
}

right = {
    "data": [{"x": 3, "y": 4}, {"x": 1, "y": 2}]
}

ycm = YouchamaJsonDiffer(left, right, ignore_order_func=make_ignore_order_func([
    "^data",
]))

ycm.diff()

assert ycm.to_dict(no_pairs=True) == {}

Bonus, you the values are interrupted as coordinates on plain, you can even define a operator to determine whether two points should be matched!(Then comparing their values)

Here's the code:

from typing import Tuple

from jycm.helper import make_ignore_order_func
from jycm.jycm import YouchamaJsonDiffer
from jycm.operator import BaseOperator
import math

left = {
    "data": [
        {"x": 1, "y": 1},
        {"x": 10, "y": 10},
        {"x": 100, "y": 100}
    ]
}

right = {
    "data": [
        {"x": 150, "y": 150},
        {"x": 10, "y": 11},
        {"x": 2, "y": 3}
    ]
}


class L2DistanceOperator(BaseOperator):
    __operator_name__ = "operator:l2distance"
    __event__ = "operator:l2distance"

    def __init__(self, path_regex, distance_threshold):
        super().__init__(path_regex=path_regex)
        self.distance_threshold = distance_threshold

    def diff(self, level: 'TreeLevel', instance, drill: bool) -> Tuple[bool, float]:
        distance = math.sqrt(
            (level.left["x"] - level.right["x"]) ** 2 + (level.left["y"] - level.right["y"]) ** 2
        )
        info = {
            "distance": distance,
            "distance_threshold": self.distance_threshold,
            "pass": distance < self.distance_threshold
        }

        if not drill:
            instance.report(self.__event__, level, info)
            return False, 1 if info["pass"] else 0
        return True, 1 if info["pass"] else 0


ycm = YouchamaJsonDiffer(left, right, ignore_order_func=make_ignore_order_func([
    "^data$",
]), custom_operators=[
    L2DistanceOperator("^data->\\[.*\\]$", 10),
])

ycm.diff()

expected = {
    'just4vis:pairs': [
        {'left': 1, 'right': 2, 'left_path': 'data->[0]->x', 'right_path': 'data->[2]->x'},
        {'left': {'x': 1, 'y': 1}, 'right': {'x': 2, 'y': 3}, 'left_path': 'data->[0]',
         'right_path': 'data->[2]'},
        {'left': 1, 'right': 3, 'left_path': 'data->[0]->y', 'right_path': 'data->[2]->y'},
        {'left': {'x': 1, 'y': 1}, 'right': {'x': 2, 'y': 3}, 'left_path': 'data->[0]',
         'right_path': 'data->[2]'},
        {'left': {'x': 1, 'y': 1}, 'right': {'x': 2, 'y': 3}, 'left_path': 'data->[0]',
         'right_path': 'data->[2]'}
    ],
    'list:add': [
        {'left': '__NON_EXIST__', 'right': {'x': 150, 'y': 150}, 'left_path': '', 'right_path': 'data->[0]'}
    ],
    'list:remove': [
        {'left': {'x': 100, 'y': 100}, 'right': '__NON_EXIST__', 'left_path': 'data->[2]', 'right_path': ''}
    ],
    'operator:l2distance': [
        {'left': {'x': 1, 'y': 1}, 'right': {'x': 2, 'y': 3}, 'left_path': 'data->[0]',
         'right_path': 'data->[2]', 'distance': 2.23606797749979, 'distance_threshold': 10,
         'pass': True},
        {'left': {'x': 10, 'y': 10}, 'right': {'x': 10, 'y': 11}, 'left_path': 'data->[1]',
         'right_path': 'data->[1]', 'distance': 1.0, 'distance_threshold': 10,
         'pass': True}
    ],
    'value_changes': [
        {'left': 1, 'right': 2, 'left_path': 'data->[0]->x', 'right_path': 'data->[2]->x', 'old': 1, 'new': 2},
        {'left': 1, 'right': 3, 'left_path': 'data->[0]->y', 'right_path': 'data->[2]->y', 'old': 1, 'new': 3},
        {'left': 10, 'right': 11, 'left_path': 'data->[1]->y', 'right_path': 'data->[1]->y', 'old': 10, 'new': 11}
    ]
}
assert ycm.to_dict() == expected

As you can see jycm report addition and remove for points {'x': 150, 'y': 150} and {'x': 100, 'y': 100} for their distances are too far (more than 10) and value-change for the other two points.

P.S. RENDERER DEMO

🌐
JSON Diff
jsondiff.com
JSON Diff - The semantic JSON compare tool
Validate, format, and compare two JSON documents. See the differences between the objects instead of just the new lines and mixed up properties.
🌐
pytz
pythonhosted.org › opslib › icsutils › jsondiff.html
IcsUtils.JsonDiff Common Library — OpsLib Library alpha documentation
"members": { ... "role": "devops", ... "group": [ "devops" ] ... } ... } >>> json.dump(old_json, open("old.json", "w")) >>> json.dump(new_json, open("new.json", "w")) >>> fp_old = open("old.json", "r") >>> fp_new = open("new.json", "r") >>> engine = Comparator(fp_old, fp_new) >>> res = engine.compare_dicts() >>> print json.dumps(res, sort_keys=True, indent=4) { "members": { "group": { "0": { "+++": "devops", "---": "ops" }, "1": { "---": "devops" } }, "role": { "+++": "devops", "---": "ops" } }, "version": { "+++": "1.3.0", "---": "1.2.0" } }
🌐
Deviloper's Blog
deviloper.in › advanced-json-diff-checker-in-python-an-in-depth-guide
Advanced JSON Diff Checker in Python: An In-Depth Guide
September 9, 2024 - In this comprehensive guide, we'll dive into the world of JSON diff checking and explore how to build an advanced JSON diff checker in Python. We'll leverage the power of the deepdiff library to perform precise comparisons and the termcolor ...
Find elsewhere
🌐
GitHub
github.com › cpatrickalves › json-diff
GitHub - cpatrickalves/json-diff: A Python script that compares two JSON files and shows their differences.
#> python json_diffs.py examples\file01.json examples\file02.json The values in object ID are different: SGML != SL The values in object GlossTerm are different: Standard Generalized Markup Language != Standard Generalized Language The values in object Abbrev are different: ISO 8879:1986 != ISO 8559:1986 The values in object GlossSeeAlso are different: ['GML', 'XML'] != ['JSO', 'XML'] The data is different
Author   cpatrickalves
🌐
PyPI
pypi.org › project › jsoncomparison
jsoncomparison · PyPI
from jsoncomparison import Compare, NO_DIFF expected = { "project": { "name": "jsoncomparison", "version": "0.1", "license": "MIT", "language": { "name": "python", "versions": [ 3.5, 3.6 ] } }, "os": "linux" } actual = { "project": { "name": "jsoncomparison", "version": 0.1, "license": "Apache 2.0", "language": { "name": "python", "versions": [ 3.6 ] } } } diff = Compare().check(expected, actual) assert diff != NO_DIFF
      » pip install jsoncomparison
    
Published   May 17, 2021
Version   1.1.0
🌐
Packetcoders
packetcoders.io › diff-ing-the-network-jsondiff-part-2
Diff`ing the Network (jsondiff) - Part 2
November 22, 2021 - import jsondiff as jd deleted_arps_symmetric = arp_diff['interfaces'].get(jd.delete) rprint(deleted_arps_symmetric) === { 'Ethernet1/1': { 'ipv4': { 'neighbors': { '10.1.1.2': {'ip': '10.1.1.2', 'link_layer_address': '5000.0009.0000', 'physical_interface': 'Ethernet1/1', 'origin': 'dynamic', 'age': '00:00:09'} } } } } Now we have the details of our missing ARP entry as a Python dictionary, we can use it to perform further actions.
🌐
GitHub
github.com › vspaz › jsondiff
GitHub - vspaz/jsondiff: jsondiff is a json diff utility. It can compare two JSON files, using strings, prefixes, or regex to filter required/optional fields, and apply relative or absolute precision tolerance per each numeric field or globally; prints the diff between 2 json files. It can optionally accept a config with required or optional fields.
jsondiff is a json diff utility. It can compare two JSON files, using strings, prefixes, or regex to filter required/optional fields, and apply relative or absolute precision tolerance per each numeric field or globally; prints the diff between ...
Author   vspaz
🌐
Snyk
snyk.io › advisor › jsondiff › jsondiff code examples
Top 5 jsondiff Code Examples | Snyk
else: data_b = read_json(args.filename_b) # Ignore keys that we don't want to diff, in addition to the ones removed that change on every commit remove_keys(data_a, KEYS_REMOVE.union(KEYS_IGNORE)) remove_keys(data_b, KEYS_REMOVE.union(KEYS_IGNORE)) remove_specifics(data_a) remove_specifics(data_b) sort_hostvar_arrays(data_a) sort_hostvar_arrays(data_b) # Perform the diff # syntax='symmetric' will produce output that prints both the before and after as "$insert" and "$delete" # marshal=True removes any special types, allowing to be dumped as json result = diff(data_a, data_b, marshal=True, syntax="symmetric") if result: # Dictionary is not empty - print differences print(json.dumps(result, sort_keys=True, indent=4)) sys.exit(1) else: # Success, no differences sys.exit(0)
🌐
Delft Stack
delftstack.com › home › howto › python › python json diff
How to Compare Multilevel JSON Objects Using JSON Diff in Python | Delft Stack
February 2, 2024 - On the other hand, it does not provide much functionality, which, if required, can be achieved using a third-party module/library. jsondiff is a third-party, open-source module that can be used to differentiate between JSON and JSON-like structures.
🌐
Snyk
snyk.io › advisor › jsondiff › functions › jsondiff.diff
How to use the jsondiff.diff function in jsondiff | Snyk
else: data_b = read_json(args.filename_b) # Ignore keys that we don't want to diff, in addition to the ones removed that change on every commit remove_keys(data_a, KEYS_REMOVE.union(KEYS_IGNORE)) remove_keys(data_b, KEYS_REMOVE.union(KEYS_IGNORE)) remove_specifics(data_a) remove_specifics(data_b) sort_hostvar_arrays(data_a) sort_hostvar_arrays(data_b) # Perform the diff # syntax='symmetric' will produce output that prints both the before and after as "$insert" and "$delete" # marshal=True removes any special types, allowing to be dumped as json result = diff(data_a, data_b, marshal=True, syntax="symmetric") if result: # Dictionary is not empty - print differences print(json.dumps(result, sort_keys=True, indent=4)) sys.exit(1) else: # Success, no differences sys.exit(0)
🌐
Medium
medium.com › @ssspidersilk › debugging-with-deepdiff-deep-differences-in-python-json-dicts-objects-51b5647d4ea9
Debugging with DeepDiff: Deep Differences in Python JSON, Dicts, & Objects | by Jerry | Medium
April 22, 2023 - As we can see, DeepDiff has identified the differences between the two lists of dictionaries, including changes in values. In this tutorial, we have explored some practical examples of using DeepDiff to simplify the debugging process in Python. By leveraging the power of DeepDiff, we can quickly and easily compare and analyze complex data structures, making it much easier to identify and fix issues in our code. Whether you are working with JSON ...
🌐
Reddit
reddit.com › r/learnpython › diff two large json array or objects
r/learnpython on Reddit: Diff two large JSON array or objects
February 26, 2022 -

I have a Python lambda function downloading a large excel file and converting it to JSON.

This file will be downloaded at least once a day (as the data can change)

I need to push the changed/updated data to an API.

Is there a way for me to compare two JSON files and output the diff?

It would be perfect if it would output multiple arrays of objects.

1 array of objects that have changed (I don’t care what has changed, just need to know that it has)

1 array of removed/deleted objects.

Top answer
1 of 1
4
Yes Firstly you have to load json data in python dictionary using json module/package After that jsondiff module/package help you check different This module/package also compare list,set,etc.👌 If will return empty dictionary {} if there is no different👍 import jsondiff oldJson = {1:"a",2:"b",3:"c"} newJson = {1:1,4:4} r = jsondiff.diff(oldJson,newJson) if r : print(r) else: print("404,No Different Found!") Output: {1: 1, 4: 4, delete: [2, 3]} 😀 json.diff take 1st arg oldJson means from which we are checking different & 2nd newJson. There are 3 syntax 🎲 : compact ( default ) Any Change in Value of key & new insrted key will display normaly symmetric Inserted & delete show differently change show normally explicit 👀 It is detailed Inserted Deleted Changed Show differently import jsondiff oldJson = {1:"a",2:"b",3:"c"} newJson = {1:1,4:4} r = jsondiff.diff(oldJson,newJson,syntax="explicit") if r: print(r) else: print("404,No Different Found!") Output : {insert: {4: 4}, update: {1: 1}, delete: [2, 3]} 😃 Finally 🔥,Now you doubt about how to access them You can access them using symbols eg. r[jsondiff.symbols.insert] OR from jsondiff import symbols r[symbols.insert] There are some other symbols which use in different compare like list,set, etc Note : if you try using insert in compact & update in compact & symmetric then you will get KeyError 😔 because those not exist there import jsondiff from jsondiff import symbols oldJson = {1:"a",2:"b",3:"c"} newJson = {1:1,4:4} r = jsondiff.diff(oldJson,newJson,syntax="explicit") if r: print("Deleted keys are ",r[symbols.delete]) else: print("404,No Different Found!") Output : Deleted keys are [2, 3] 🥳 Thanks for reading 😂
🌐
CodeRivers
coderivers.org › blog › jsondiff-python
Unveiling the Power of `jsondiff` in Python: Comparing and Analyzing JSON Data - CodeRivers
April 24, 2025 - jsondiff is a powerful library in Python that simplifies the process of comparing JSON-like data structures. It provides a detailed diff that shows the differences between two JSON objects, which can be used for various purposes, such as version control, data validation, and debugging.
🌐
GitHub
github.com › python273 › prettydiff
GitHub - python273/prettydiff: Diff parsed JSON objects and pretty-print it
prettydiff - diff parsed JSON objects and pretty-print it · $ python3 -m pip install prettydiff ·
Author   python273
🌐
Medium
medium.com › @abedmaatalla › compare-two-json-objects-python-c2f763c943b0
Compare two JSON objects (Python) | by Abed MAATALLA | Medium
August 4, 2022 - Programmatically, one can write ... writing code and all, This is where deepdiff comes in handy. Deepdiff is a powerful python library to compare 2 dictionaries....
🌐
PyPI
pypi.org › project › custom-json-diff
custom-json-diff · PyPI
CycloneDx BOM and Oasis CSAF diffing and comparison tool. ... Comparing two JSON files presents an issue when the two files have certain fields which are dynamically generated (e.g. timestamps), variable ordering, or other fields which need ...
      » pip install custom-json-diff
    
Published   Mar 12, 2025
Version   2.1.6