ChannelIQ / jsoncompare

A simple python library for comparing json objects for equivalency and helping developers to quickly spot differences between complex json structures.
MIT License
55 stars 40 forks source link

Install

pip install jsoncompare

Explanation

Recent Changes

Version    Comments
0.1.1      Orginal Version
0.1.2      Adds support for "contains"

Examples

from jsoncompare import jsoncompare

# Compare respecting each array's order
jsoncompare.are_same(a, b)

# Compare ignoring each array's order
jsoncompare.are_same(a, b, True)

# Compare ignoring the value of certain keys
jsoncompare.are_same(a, b, False, ["datetime", "snacktime"])

# Contains at least
jsoncompare.contains(a, b)
# Getting difference traces
from jsoncompare import jsoncompare

a = {
    "failureReason" : "Invalid request entity",
    "fieldValidationErrors" : [
        {
            "field" : "normal value 1",
            "reason" : "may not be smelly"
        },
        {
            "field" : "Catalog.name",
            "reason" : "may not be null"
        }
    ]
}
b = {
    "failureReason" : "Invalid request entity",
    "fieldValidationErrors" : [
        {
            "field" : "crazy value 2",
            "reason" : "may not be null"
        },
        {
            "field" : "Catalog.catalogOwner",
            "reason" : "may not be null"
        }
    ]
}
print jsoncompare.are_same(a, b)[1]

results in:

Reason: Different values
Expected:
  "normal value 1"
Actual:
  "crazy value 2"

Reason: Different values (Check order)
Expected:
  {
      "field": "normal value 1", 
      "reason": "may not be smelly"
  }
Actual:
  {
      "field": "crazy value 2", 
      "reason": "may not be null"
  }

Reason: Different values
Expected:
  [
      {
          "field": "normal value 1", 
          "reason": "may not be smelly"
      }, 
      {
          "field": "Catalog.name", 
          "reason": "may not be null"
      }
  ]
Actual:
  [
      {
          "field": "crazy value 2", 
          "reason": "may not be null"
      }, 
      {
          "field": "Catalog.catalogOwner", 
          "reason": "may not be null"
      }
  ]