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 беҳтарин роҳи тавсияшуда барои таъмини боэътимодӣ ва дастгирӣ мебошад.