Komut satırı JSON, YAML, XML ve HTML işleme araçları

Bu flood’da komut satırından JSON, YAML, XML ve HTML formatındaki metinleri işlememize yardımcı olan jq, yq, xq ve pup isimli araçları tanıtacağım.

Son 15 yılda servis tabanlı mimari ve sonrasında bulut devriminin (X as a Service) gerçekleşmesi ile birlikte sistemler arası entegrasyon ihtiyacı arttı. Entegrasyonların maliyet-etkin şekilde oluşturulması ve bakımının yapılması için de otomasyon bir zorunluluk haline geldi.

Otomasyon ile birlikte tahtını geçici olarak görsel kullanıcı arayüzüne bırakan komut satırı da tahtına tekrar kavuşmuş oldu. Bu flood’da JSON, YAML, XML ve HTML formatındaki akışları işlememize yardım eden bazı komut satırı araçlarını inceleyeceğiz.

Öncelikle inceleyeceğimiz diğer araçlara da ilham kaynağı olan, JSON formatındaki verileri işlemeye yarayan ve kullanım alanı en yaygın olan jq komut satırı aracı ile başlayalım.

jq yardımıyla bir API çağrısı veya bir CLI aracının çalıştırılması sonucu elde edilen JSON ile formatlanmış veriden arzu edilen alanlar süzülebilir, gelen JSON'dan sadece süzülen değerlerden oluşan başka bir JSON oluşturulabilir ve verinin istatistiği çıkarılabilir.

jq'nun belki de en yoğun kullanım alanı JSON veriyi ekrana aşağıdaki gibi renklendirilmiş bir biçimde basması olabilir :-)

jq, en basit anlamı ile aşağıdaki örneklerde sırasıyla JSON dizisinin ilk ve ikinci düğümünü göstermek ve JSON içerisinde bulunan email alanlarının süzülmesi amacıyla kullanılmıştır.

jq pipe operatörü yardımıyla Unix/Linux kabuklarında olduğu gibi bir jq filtresinden çıkan sonucu bir diğerine girdi olarak verebilir. Aşağıdaki örnekte pipe operatörü yardımıyla orjinal JSON'dan hareketle yeni bir JSON oluşturulmuştur.

Anlaşılacağı üzere jq'nun yetenekleri saymakla kolay bitmez :-) Arka planda filtreleme için jq'yu kullanan ve YAML dosyalar üzerinde çalışan yq adında pek faydalı bir başka araç daha bulunmaktadır. Bu araç girdiyi JSON'a dönüştürerek filtrelemeyi jq ile yapar.

yq, jq ile JSON'da yapılan bütün filtreleme işlemlerinin YAML üzerinde de yapılabilmesini sağlar. Aşağıdaki örnekte jq ile daha önce JSON üzerinde yapılan işlem yq ile YAML'da yapılmıştır.

jq ve yq ailesinden gelen ve xq olarak adlandırılan bir başka araç ise aynı fonksiyonu XML akışları üzerinde yapabilmektedir. xq filtreleme dili olarak birçok başka aracın aksine XPath kullanmak yerine yine jq'nun zengin sentaksını kullanır.

Diğer araçlar gibi jq'dan ilham alan ve onun popülerliğinde en yakın olan araç ise HTML dokümanlar üzerinde CSS Selector kullanarak işlem yapılmasını sağlayan pup aracıdır. pup, bir API vasıtasıyla iletilmeyen verilerin HTML'den alınabilmesini sağlar.

pup'un kullanımını örneklemek üzere aşağıda eksisozluk'ün gündem penceresinde bulunan başlıkların linkleri listelenmiştir.

pup istenildiğinde JSON çıktı verebilmektedir. Aşağıdaki örnekte pup'tan alınan JSON çıktısı üzerinde jq ile işlemler yapılmış ve başlıklar o gün için başlıklara girilen toplam girdi sayılarına göre sıralanmıştır.

Son olarak, yukarıda sıralanan araçlar çok yetenekli olmakla birlikte gereğinden fazla kullanıldıklarında bakım problemleri yaratmaktadır. Kompleks iş gereksinimleri bulunan uygulamalarda bu araçlar yerine uygun bir programlama dili ve SDK ile ilerlemek daha sağlıklı olacaktır.