1

How to compare two JSON documents (one with old values and one with updated values) and return what has changed or newly added to the new document.

For example

JSON document a (old document):

{
  "Category": {
    "0": "CAPTCHA",
    "1": "Client Auto-update",
    "2": "Connectivity Check",
    "3": "Device Metrics (for 1.0+ and 2.0+ WorkSpaces client applications)",
    "4": "Client Metrics (for 3.0+ WorkSpaces client applications)",
    "5": "Dynamic Messaging Service (for 3.0+ WorkSpaces client applications)",
    "6": "Directory Settings",
    "7": "Forrester Log Service",
    "8": "Health Check (DRP) Servers",
    "9": "Registration Dependency (for Web Access and Teradici PCoIP Zero Clients)",
    "10": "User Login Pages",
    "11": "WS Broker",
    "12": "WorkSpaces API Endpoints"
  },
  "Domain or IP address": {
    "0": "https://opfcaptcha-prod.s3.amazonaws.com/",
    "1": "https://d2td7dqidlhjx7.cloudfront.net/  In the AWS GovCloud (US-West) Region:  https://s3.amazonaws.com/workspaces-client-updates/prod/pdt/windows/WorkSpacesAppCast.xml",
    "2": "https://connectivity.amazonworkspaces.com/",
    "3": "https://device-metrics-us-2.amazon.com/",
    "4": "Domains:  https://skylight-client-ds.us-east-1.amazonaws.com https://skylight-client-ds.us-west-2.amazonaws.com  https://skylight-client-ds.ap-northeast-2.amazonaws.com  https://skylight-client-ds.ap-southeast-1.amazonaws.com  https://skylight-client-ds.ap-southeast-2.amazonaws.com  https://skylight-client-ds.ap-northeast-1.amazonaws.com  https://skylight-client-ds.ca-central-1.amazonaws.com  https://skylight-client-ds.eu-central-1.amazonaws.com  https://skylight-client-ds.eu-west-1.amazonaws.com https://skylight-client-ds.eu-west-2.amazonaws.com  https://skylight-client-ds.sa-east-1.amazonaws.com  In the AWS GovCloud (US-West) Region:  https://skylight-client-ds.us-gov-west-1.amazonaws.com",
    "5": "Domains:  https://ws-client-service.us-east-1.amazonaws.com  https://ws-client-service.us-west-2.amazonaws.com  https://ws-client-service.ap-northeast-2.amazonaws.com  https://ws-client-service.ap-southeast-1.amazonaws.com  https://ws-client-service.ap-southeast-2.amazonaws.com  https://ws-client-service.ap-northeast-1.amazonaws.com  https://ws-client-service.ca-central-1.amazonaws.com  https://ws-client-service.eu-central-1.amazonaws.com  https://ws-client-service.eu-west-1.amazonaws.com  https://ws-client-service.eu-west-2.amazonaws.com  https://ws-client-service.sa-east-1.amazonaws.com",
    "6": "Authentication from the client to the customer directory  before login to the WorkSpace:  https://d32i4gd7pg4909.cloudfront.net/prod/<region>/<directory  ID>  Connections from macOS clients:  https://d32i4gd7pg4909.cloudfront.net/  Customer directory settings:  https://d21ui22avrxoh6.cloudfront.net/prod/<region>/<directory  ID>  Login page graphics for customer directory level co-branding:  https://d1cbg795sa4g1u.cloudfront.net/prod/<region>/<directory  ID>  CSS file to style the login pages:  https://d3s98kk2h6f4oh.cloudfront.net/  https://dyqsoz7pkju4e.cloudfront.net/  JavaScript file for the login pages:  US East (N. Virginia) — https://d32i4gd7pg4909.cloudfront.net/  US West (Oregon) — https://d18af777lco7lp.cloudfront.net/  Asia Pacific (Seoul) — https://dtyv4uwoh7ynt.cloudfront.net/  Asia Pacific (Singapore) — https://d3qzmd7y07pz0i.cloudfront.net/  Asia Pacific (Sydney) — https://dwcpoxuuza83q.cloudfront.net/  Asia Pacific (Tokyo) — https://d2c2t8mxjhq5z1.cloudfront.net/  Canada (Central) — https://d2wfbsypmqjmog.cloudfront.net/  Europe (Frankfurt) — https://d1whcm49570jjw.cloudfront.net/  Europe (Ireland) — https://d3pgffbf39h4k4.cloudfront.net/  Europe (London) — https://d16q6638mh01s7.cloudfront.net/  South America (São Paulo) — https://d2lh2qc5bdoq4b.cloudfront.net/  In the AWS GovCloud (US-West) Region:  Customer directory settings:  https://s3.amazonaws.com/workspaces-client-properties/prod/pdt/<directory  ID>  Login page graphics for customer directory level co-branding:  https://s3.amazonaws.com/workspaces-client-assets/prod/pdt/<directory  ID>  CSS file to style the login pages:  https://s3.amazonaws.com/workspaces-clients-css/workspaces_v2.css  JavaScript file for the login pages:  Not applicable",
    "7": "https://fls-na.amazon.com/",
    "8": "Health Check Servers",
    "9": "https://s3.amazonaws.com",
    "10": "https://<directory id>.awsapps.com/ (where  <directory id> is the customer's domain)",
    "11": "Domains:  https://ws-broker-service.us-east-1.amazonaws.com  https://ws-broker-service-fips.us-east-1.amazonaws.com  https://ws-broker-service.us-west-2.amazonaws.com  https://ws-broker-service-fips.us-west-2.amazonaws.com  https://ws-broker-service.ap-northeast-2.amazonaws.com  https://ws-broker-service.ap-southeast-1.amazonaws.com  https://ws-broker-service.ap-southeast-2.amazonaws.com  https://ws-broker-service.ap-northeast-1.amazonaws.com  https://ws-broker-service.ca-central-1.amazonaws.com  https://ws-broker-service.eu-central-1.amazonaws.com  https://ws-broker-service.eu-west-1.amazonaws.com  https://ws-broker-service.eu-west-2.amazonaws.com  https://ws-broker-service.sa-east-1.amazonaws.com  https://ws-broker-service.us-gov-west-1.amazonaws.com  https://ws-broker-service-fips.us-gov-west-1.amazonaws.com",
    "12": "Domains:  https://workspaces.us-east-1.amazonaws.com  https://workspaces-fips.us-east-1.amazonaws.com  https://workspaces.us-west-2.amazonaws.com  https://workspaces-fips.us-west-2.amazonaws.com  https://workspaces.ap-northeast-2.amazonaws.com  https://workspaces.ap-southeast-1.amazonaws.com  https://workspaces.ap-southeast-2.amazonaws.com  https://workspaces.ap-northeast-1.amazonaws.com  https://workspaces.ca-central-1.amazonaws.com  https://workspaces.eu-central-1.amazonaws.com  https://workspaces.eu-west-1.amazonaws.com  https://workspaces.eu-west-2.amazonaws.com  https://workspaces.sa-east-1.amazonaws.com  https://workspaces.us-gov-west-1.amazonaws.com  https://workspaces-fips.us-gov-west-1.amazonaws.com"
  }
}

JSON document b (new document):

{
  "Category": {
    "0": "CAPTCHA",
    "1": "Client Auto-update",
    "2": "Connectivity Check",
    "3": "Device Metrics (for 1.0+ and 2.0+ WorkSpaces client applications)",
    "4": "Client Metrics (for 3.0+ WorkSpaces client applications)",
    "5": "Dynamic Messaging Service (for 3.0+ WorkSpaces client applications)",
    "6": "Directory Settings",
    "7": "Forrester Log Service",
    "8": "Health Check (DRP) Servers",
    "9": "Registration Dependency (for Web Access and Teradici PCoIP Zero Clients)",
    "10": "User Login Pages",
    "11": "WS Broker",
    "12": "WorkSpaces API Endpoints"
  },
  "Domain or IP address": {
    "0": "https://opfcaptcha-prod.s3.amazonaws.com/",
    "1": "https://d2td7dqidlhjx7.cloudfront.net/  In the AWS GovCloud (US-West) Region:  https://s3.amazonaws.com/workspaces-client-updates/prod/pdt/windows/WorkSpacesAppCast.xml",
    "2": "https://connectivity.amazonworkspaces.com/",
    "3": "https://device-metrics-us-2.amazon.com/",
    "4": "Domains:  https://skylight-client-ds.us-east-1.amazonaws.com https://skylight-client-ds.us-west-2.amazonaws.com  https://skylight-client-ds.ap-northeast-2.amazonaws.com  https://skylight-client-ds.ap-southeast-1.amazonaws.com  https://skylight-client-ds.ap-southeast-2.amazonaws.com  https://skylight-client-ds.ap-northeast-1.amazonaws.com  https://skylight-client-ds.ca-central-1.amazonaws.com  https://skylight-client-ds.eu-central-1.amazonaws.com  https://skylight-client-ds.eu-west-1.amazonaws.com https://skylight-client-ds.eu-west-2.amazonaws.com  https://skylight-client-ds.sa-east-1.amazonaws.com  In the AWS GovCloud (US-West) Region:  https://skylight-client-ds.us-gov-west-1.amazonaws.com",
    "5": "Domains:  https://ws-client-service.us-east-1.amazonaws.com  https://ws-client-service.us-west-2.amazonaws.com  https://ws-client-service.ap-northeast-2.amazonaws.com  https://ws-client-service.ap-southeast-1.amazonaws.com  https://ws-client-service.ap-southeast-2.amazonaws.com  https://ws-client-service.ap-northeast-1.amazonaws.com  https://ws-client-service.ca-central-1.amazonaws.com  https://ws-client-service.eu-central-1.amazonaws.com  https://ws-client-service.eu-west-1.amazonaws.com  https://ws-client-service.eu-west-2.amazonaws.com  https://ws-client-service.sa-east-1.amazonaws.com",
    "6": "Authentication from the client to the customer directory  before login to the WorkSpace:  https://d32i4gd7pg4909.cloudfront.net/prod/<region>/<directory  ID>  Connections from macOS clients:  https://d32i4gd7pg4909.cloudfront.net/  Customer directory settings:  https://d21ui22avrxoh6.cloudfront.net/prod/<region>/<directory  ID>  Login page graphics for customer directory level co-branding:  https://d1cbg795sa4g1u.cloudfront.net/prod/<region>/<directory  ID>  CSS file to style the login pages:  https://d3s98kk2h6f4oh.cloudfront.net/  https://dyqsoz7pkju4e.cloudfront.net/  JavaScript file for the login pages:  US East (N. Virginia) — https://d32i4gd7pg4909.cloudfront.net/  US West (Oregon) — https://d18af777lco7lp.cloudfront.net/  Asia Pacific (Seoul) — https://dtyv4uwoh7ynt.cloudfront.net/  Asia Pacific (Singapore) — https://d3qzmd7y07pz0i.cloudfront.net/  Asia Pacific (Sydney) — https://dwcpoxuuza83q.cloudfront.net/  Asia Pacific (Tokyo) — https://d2c2t8mxjhq5z1.cloudfront.net/  Canada (Central) — https://d2wfbsypmqjmog.cloudfront.net/  Europe (Frankfurt) — https://d1whcm49570jjw.cloudfront.net/  Europe (Ireland) — https://d3pgffbf39h4k4.cloudfront.net/  Europe (London) — https://d16q6638mh01s7.cloudfront.net/  South America (São Paulo) — https://d2lh2qc5bdoq4b.cloudfront.net/  In the AWS GovCloud (US-West) Region:  Customer directory settings:  https://s3.amazonaws.com/workspaces-client-properties/prod/pdt/<directory  ID>  Login page graphics for customer directory level co-branding:  https://s3.amazonaws.com/workspaces-client-assets/prod/pdt/<directory  ID>  CSS file to style the login pages:  https://s3.amazonaws.com/workspaces-clients-css/workspaces_v2.css  JavaScript file for the login pages:  Not applicable",
    "7": "https://fls-na.amazon.com/",
    "8": "Health Check Servers",
    "9": "https://s3.amazonaws.com",
    "10": "https://<directory id>.awsapps.com/ (where  <directory id> is the customer's domain)",
    "11": "Domains:  https://ws-broker-service.us-east-1.amazonaws.com  https://ws-broker-service-fips.us-east-1.amazonaws.com  https://ws-broker-service.us-west-2.amazonaws.com  https://ws-broker-service-fips.us-west-2.amazonaws.com  https://ws-broker-service.ap-northeast-2.amazonaws.com  https://ws-broker-service.ap-southeast-1.amazonaws.com  https://ws-broker-service.ap-southeast-2.amazonaws.com  https://ws-broker-service.ap-northeast-1.amazonaws.com  https://ws-broker-service.ca-central-1.amazonaws.com  https://ws-broker-service.eu-central-1.amazonaws.com  https://ws-broker-service.eu-west-1.amazonaws.com  https://ws-broker-service.eu-west-2.amazonaws.com  https://ws-broker-service.sa-east-1.amazonaws.com  https://ws-broker-service.us-gov-west-1.amazonaws.com  https://ws-broker-service-fips.us-gov-west-1.amazonaws.com",
    "12": "Domains: https://workspaces.us-east-2.amazonaws.com  https://workspaces-fips.us-east-2.amazonaws.com https://workspaces.us-east-1.amazonaws.com  https://workspaces-fips.us-east-1.amazonaws.com  https://workspaces.us-west-2.amazonaws.com  https://workspaces-fips.us-west-2.amazonaws.com  https://workspaces.ap-northeast-2.amazonaws.com  https://workspaces.ap-southeast-1.amazonaws.com  https://workspaces.ap-southeast-2.amazonaws.com  https://workspaces.ap-northeast-1.amazonaws.com  https://workspaces.ca-central-1.amazonaws.com  https://workspaces.eu-central-1.amazonaws.com  https://workspaces.eu-west-1.amazonaws.com  https://workspaces.eu-west-2.amazonaws.com  https://workspaces.sa-east-1.amazonaws.com"
    "13": "23.25.1.0"
  }
}

Output should be:

Newly added URL/IP -
"13": "23.25.1.0"
https://workspaces.us-east-2.amazonaws.com  https://workspaces-fips.us-east-2.amazonaws.com

Removed URL/IP - 
https://workspaces.us-gov-west-1.amazonaws.com  https://workspaces-fips.us-gov-west-1.amazonaws.com
martineau
  • 119,623
  • 25
  • 170
  • 301
mellifluous
  • 2,345
  • 2
  • 29
  • 45
  • 2
    Does this answer your question? [Python Comparing Two Json objects irrespective of the sequence of elements in them](https://stackoverflow.com/questions/17607640/python-comparing-two-json-objects-irrespective-of-the-sequence-of-elements-in-th) – DarrylG Jan 24 '21 at 19:53
  • did you check my answer ? – DRPK Jan 25 '21 at 04:02

1 Answers1

1

Try this (general Idea):

def check_diff(get_old_document, get_new_document):
    old_categories, old_domains = get_old_document["Category"], get_old_document["Domain or IP address"]
    new_categories, new_domains = get_new_document["Category"], get_new_document["Domain or IP address"]

    result = []
    for each_key, each_value in new_categories.items():
        if each_key in old_categories and old_categories[each_key] == each_key:
            result.append("Updated Categories; Key: {}, Updated Value: {}".format(each_key, each_value))
        elif each_key not in old_categories:
            result.append("Added new Category; Key: {}, Value: {}".format(each_key, each_value))

    for each_key, each_value in new_domains.items():
        if each_key in old_categories and old_categories[each_key] == each_key:
            result.append("Updated Domains; Key: {}, Updated Value: {}".format(each_key, each_value))
        elif each_key not in old_categories:
            result.append("Added new Domain; Key: {}, Value: {}".format(each_key, each_value))
    
    for each_key, each_value in old_categories.items():
        if each_key not in new_categories:
            result.append("Removed from Categories; Key: {}, Value: {}".format(each_key, each_value))
    for each_key, each_value in old_domains.items():
        if each_key not in new_domains:
            result.append("Removed from Domains; Key: {}, Value: {}".format(each_key, each_value))
    return "\n".join(result)


print(check_diff(your_old_json, your_new_json))
DRPK
  • 2,023
  • 1
  • 14
  • 27
  • Thank you for your response, this solutions doesn't work if something is added or removed `Domain or IP Address` value. for example is a new url is added to `12: Domains: https://workspaces.us-east-2.amazonaws.com https://workspaces-f...`. It works when both key, value are deleted or added – mellifluous Jan 26 '21 at 08:03
  • @thesagarreddy: you mean it may has same keys with different values ? – DRPK Jan 26 '21 at 11:32
  • yes, the keys will be the same, values will be updated. New URLs/IPs will be added or existing URLs/IPs will be modified or removed – mellifluous Jan 26 '21 at 16:12