Sobes.tech
Junior

Πώς να ελέγξετε ότι το JSON περιέχει τα σωστά πεδία;

sobes.tech AI

Απάντηση από AI

Υπάρχουν διάφορες προσεγγίσεις:

  1. Έλεγχος ύπαρξης πεδίων: Περνάμε από τα αναμενόμενα πεδία και ελέγχουμε την παρουσία τους στο JSON.

    import json
    
    def check_json_fields(json_string, expected_fields):
        try:
            data = json.loads(json_string)
            for field in expected_fields:
                if field not in data:
                    return False, f"Το πεδίο '{field}' λείπει"
            return True, "Όλα τα αναμενόμενα πεδία υπάρχουν"
        except json.JSONDecodeError:
            return False, "Μη έγκυρο JSON"
        except Exception as e:
            return False, f"Σφάλμα: {e}"
    
    # Παράδειγμα χρήσης
    json_data = '{"name": "Alice", "age": 30}'
    expected = ["name", "age", "city"]
    result, message = check_json_fields(json_data, expected)
    print(result, message) # False Το πεδίο 'city' λείπει
    
    json_data_valid = '{"name": "Bob", "age": 25}'
    expected_valid = ["name", "age"]
    result_valid, message_valid = check_json_fields(json_data_valid, expected_valid)
    print(result_valid, message_valid) # True Όλα τα αναμενόμενα πεδία υπάρχουν
    
  2. Χρήση JSON Schema: Το JSON Schema είναι ένας λεξικός ορισμός για την επικύρωση της δομής του JSON. Είναι η πιο αξιόπιστη και ευέλικτη προσέγγιση για πολύπλοκες δομές.

    from jsonschema import validate, SchemaError
    
    # Σχήμα για επικύρωση JSON
    schema = {
        "type": "object",
        "properties": {
            "name": {"type": "string"},
            "age": {"type": "integer", "minimum": 0},
            "city": {"type": "string"}
        },
        "required": ["name", "age"] # Απαιτούμενα πεδία
    }
    
    def validate_json_with_schema(json_data, schema):
        try:
            validate(instance=json_data, schema=schema)
            return True, "Το JSON ταιριάζει με το σχήμα"
        except SchemaError as e:
            return False, f"Σφάλμα στο σχήμα: {e.message}"
        except Exception as e:
            return False, f"Σφάλμα επικύρωσης: {e.message}"
    
    # Παράδειγμα χρήσης
    valid_data = {"name": "Alice", "age": 30, "city": "New York"}
    result_valid, message_valid = validate_json_with_schema(valid_data, schema)
    print(result_valid, message_valid) # True Το JSON ταιριάζει με το σχήμα
    
    invalid_data = {"name": "Bob"} # λείπει το age
    result_invalid, message_invalid = validate_json_with_schema(invalid_data, schema)
    print(result_invalid, message_invalid) # False Σφάλμα επικύρωσης: το 'age' είναι υποχρεωτική ιδιότητα
    
    invalid_type_data = {"name": "Charlie", "age": "twenty"} # λανθασμένος τύπος του age
    result_type_invalid, message_type_invalid = validate_json_with_schema(invalid_type_data, schema)
    print(result_type_invalid, message_type_invalid) # False Σφάλμα επικύρωσης: το 'twenty' δεν είναι τύπου 'integer'
    
  3. Χρήση βιβλιοθηκών για έλεγχο τύπων και δομής: Ορισμένες γλώσσες διαθέτουν βιβλιοθήκες που επιτρέπουν τον πιο δηλωτικό ορισμό της δομής δεδομένων.

    • Python: Pydantic, Marshmallow.
    • JavaScript: Joi, Yup.
  4. Γράψιμο προσαρμοσμένων ελέγχων: Για ειδικές περιπτώσεις ή πολύπλοκη λογική, μπορείτε να γράψετε τις δικές σας συναρτήσεις επικύρωσης.

Η επιλογή της μεθόδου εξαρτάται από την πολυπλοκότητα της δομής JSON, τις απαιτήσεις αυστηρότητας και το τεχνολογικό στοίβαγμα που χρησιμοποιείται. Το JSON Schema είναι η πιο συνιστώμενη προσέγγιση για αξιοπιστία και υποστήριξη.