Themenersteller
#1
jq ile JSON şemasını kontrol etme
Giriş ve temel yaklaşım
Pratik adımlar ve örnekler
[list]Temel varlık kontrolleri: Zorunlu alanlar, tür kontrolü ve değer aralığı
(Bu yaklaşım, her alanın varlığını ve türünü kabaca doğrular; hatalı durumlarda exit code 0 yerine 1 döndürmek için additional logic eklemek gerekir.)
[list] Tür kontrolü ve değer aralıkları
[code]jq 'if (.user.age? // -1) >= 0 and (.user.age? // -1)
Bu toplulukta sıkça karşılaştığımız sorunlardan biri, JSON verisinin beklenen yapıya uygun olup olmadığını güvenli bir şekilde doğrulamak. Özellikle API entegrasyonlarında veya konfigürasyon dosyalarında hatalı alan adları, beklenen türler veya zorunlu alanların eksik olması, sonraki işlemleri kırabilir. Bu nedenle, jq ile JSON şemasını kontrol etmek için pratik bir yol taramak mantıklı olur.
Giriş ve temel yaklaşım
- jq, JSON üzerinde güçlü filtreler ve dönüştürmeler sağlayan bir komut satırı aracıdır. Doğrulama amacıyla doğrudan bir “JSON schema” motoru değildir, ancak basit doğrulama kurallarını hızlıca uygulamak için idealdir.
- Temel yaklaşım, şemanın gerektirdiği alanları tek tek kontrol etmek ve her bir koşul için çıkış kodu veya hata mesajı üretmektir. Daha karmaşık doğrulamalar için birkaç adımı birleştirmek gerekir.
Pratik adımlar ve örnekler
[list]
- Örnek JSON yapısı:
CODE
1234567891011{
"user": {
"id": 123,
"name": "Ali",
"email": "ali@example.com",
"age": 30
},
"settings": {
"notifications": true
}
}- Zorunlu alanlar ve tür kontrollerinin basit bir jq akışı:
CODE
12jq '(.user.id? // empty) as $id | (.user.name? // empty) as $name | (.user.email? // empty) as $email
| select(type != "object" or ($id and $name and $email))' input.json(Bu yaklaşım, her alanın varlığını ve türünü kabaca doğrular; hatalı durumlarda exit code 0 yerine 1 döndürmek için additional logic eklemek gerekir.)
[list]
- Yaş alanını 0-120 arasında sınırlamak için:
[code]jq 'if (.user.age? // -1) >= 0 and (.user.age? // -1)
