Sobes.tech
Junior

JSON'un doğru alanları içerdiğini nasıl kontrol edilir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Mevcut birkaç yaklaşım vardır:

  1. Alanların varlığını kontrol etme: Beklenen alanlar üzerinde yineleme yapın ve bunların JSON'da var olup olmadığını kontrol edin.

    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}' alanı eksik"
            return True, "Tüm beklenen alanlar mevcut"
        except json.JSONDecodeError:
            return False, "Geçersiz JSON"
        except Exception as e:
            return False, f"Hata: {e}"
    
    # Kullanım örneği
    json_data = '{"name": "Alice", "age": 30}'
    expected = ["name", "age", "city"]
    result, message = check_json_fields(json_data, expected)
    print(result, message) # False 'city' alanı eksik
    
    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 Tüm beklenen alanlar mevcut
    
  2. JSON Schema kullanımı: JSON Schema, JSON yapısını doğrulamak için kullanılan bir sözlüktür. Bu, karmaşık yapılar için en güvenilir ve esnek yaklaşımdır.

    from jsonschema import validate, SchemaError
    
    # JSON doğrulama şeması
    schema = {
        "type": "object",
        "properties": {
            "name": {"type": "string"},
            "age": {"type": "integer", "minimum": 0},
            "city": {"type": "string"}
        },
        "required": ["name", "age"] # Zorunlu alanlar
    }
    
    def validate_json_with_schema(json_data, schema):
        try:
            validate(instance=json_data, schema=schema)
            return True, "JSON şemaya uygun"
        except SchemaError as e:
            return False, f"Şema hatası: {e.message}"
        except Exception as e:
            return False, f"Doğrulama hatası: {e.message}"
    
    # Kullanım örneği
    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 şemaya uygun
    
    invalid_data = {"name": "Bob"} # 'age' eksik
    result_invalid, message_invalid = validate_json_with_schema(invalid_data, schema)
    print(result_invalid, message_invalid) # False Doğrulama hatası: 'age' zorunlu özellik
    
    invalid_type_data = {"name": "Charlie", "age": "twenty"} # Yanlış tip
    result_type_invalid, message_type_invalid = validate_json_with_schema(invalid_type_data, schema)
    print(result_type_invalid, message_type_invalid) # False Doğrulama hatası: 'twenty' 'integer' değil
    
  3. Tip ve yapı doğrulama kütüphanelerinin kullanımı: Bazı diller, veri yapısını daha deklaratif şekilde tanımlamaya izin veren kütüphanelere sahiptir.

    • Python: Pydantic, Marshmallow.
    • JavaScript: Joi, Yup.
  4. Özelleştirilmiş doğrulama fonksiyonları yazma: Belirli durumlar veya karmaşık mantıklar için kendi doğrulama fonksiyonlarınızı yazabilirsiniz.

Yöntem seçimi, JSON yapısının karmaşıklığına, kontrolün katılığına ve kullanılan teknolojik yığınına bağlıdır. JSON Schema, güvenilirliği ve desteği sağlamak için en önerilen yaklaşımdır.