Full code

 avatar
unknown
python
2 years ago
1.7 kB
5
Indexable
import json
import csv

def get_schema_field_names(filename):
    """Extract the list of fieldNames defined in the schema from a given JSON file."""
    with open(filename, 'r') as file:
        data = json.load(file)
    schema = data.get("feed", {}).get("catalog", {}).get("schema", [])
    return [field["fieldName"] for field in schema]

def get_item_keys(filename):
    """Extract the list of keys from the items in a given JSON file."""
    with open(filename, 'r') as file:
        data = json.load(file)
    items = data.get("feed", {}).get("catalog", {}).get("add", {}).get("items", [])
    if not items:
        return []
    return list(items[0].keys())

def check_mismatches_and_save_to_csv(filenames):
    with open("error.csv", "w", newline='') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow(["Filename", "Mismatch Type", "Field/Key Name"])

        for filename in filenames:
            schema_field_names = get_schema_field_names(filename)
            item_keys = get_item_keys(filename)

            # Check for schema fields not present in item keys
            for field in schema_field_names:
                if field not in item_keys:
                    writer.writerow([filename, "Schema Field Missing in Item", field])

            # Check for item keys not present in schema fields
            for key in item_keys:
                if key not in schema_field_names:
                    writer.writerow([filename, "Item Key Missing in Schema", key])

if __name__ == "__main__":
    filenames = ["file1.json", "file2.json", "file3.json", "file4.json"]
    check_mismatches_and_save_to_csv(filenames)
    print("Mismatch details have been saved to error.csv")
Editor is loading...