Ana içeriğe geç

JEXL Script ile Dizi İşleme

Senaryo

Template modundaki #{...} bloğu içine çok satırlı JEXL Script yazılabilir. Bu yöntemle:

  • JSON array elemanları üzerinde döngü kurulabilir.
  • Toplama, sayaç ve filtreleme işlemleri yapılabilir.
  • if/else ile koşullu çıktı üretilebilir.

Body'den JSONPath ile çekilen array değerleri, JEXL bağlamına otomatik olarak liste olarak aktarılır; for (item : koleksiyon) söz dizimiyle gezinilebilir.

not

JEXL Script'te return kullanılmaz. Bloğun sonundaki son ifadenin değeri otomatik olarak döndürülür.


Örnek 1: Etiket Dizisini JSON Dizisine Dönüştürme

Aşağıdaki istek body'si verilsin:

{
"name": "Karabaş",
"tags": [
{"id": 5, "name": "aşılı"},
{"id": 12, "name": "mikroçipli"}
]
}

tags dizisindeki her nesneyi özel formatta bir JSON dizisine dönüştürme:

Şablon

#{
var out = '[';
var first = true;
for (item : body.$.tags) {
if (!first) { out = out + ','; }
out = out + '{"id":' + item.id + ',"label":"' + item.name + '"}';
first = false;
}
out + ']'
}

Satır Yapılandırması

AlanDeğer
Oluşturma ModuTemplate
ŞablonYukarıdaki JEXL Script bloğu
HedefÖzel Değişken → tagList
Varsayılan Değer[]

Beklenen Çıktı

[{"id":5,"label":"aşılı"},{"id":12,"label":"mikroçipli"}]

Örnek 2: Sipariş Kalemlerini Toplama

Aşağıdaki istek body'si verilsin:

{
"orderId": "ORD-001",
"items": [
{"name": "Ürün A", "price": 120.00},
{"name": "Ürün B", "price": 85.50},
{"name": "Ürün C", "price": 44.50}
]
}

Kalem fiyatlarının toplamını hesaplama:

Şablon

#{
var total = 0;
for (item : body.$.items) {
total = total + item.price;
}
total
}

Satır Yapılandırması

AlanDeğer
Oluşturma ModuTemplate
ŞablonYukarıdaki JEXL Script bloğu
HedefÖzel Değişken → orderTotal
Varsayılan Değer0

Beklenen Çıktı

250.0

Örnek 3: Koşullu Filtreleme ile Aktif Öğeleri Seçme

Yalnızca active: true olan öğeleri ayıklama:

Şablon

#{
var out = '[';
var first = true;
for (item : body.$.items) {
if (item.active == true) {
if (!first) { out = out + ','; }
out = out + '"' + item.name + '"';
first = false;
}
}
out + ']'
}

Beklenen Çıktı

items: [{"name":"A","active":true},{"name":"B","active":false},{"name":"C","active":true}] için:

["A","C"]

Örnek 4: if/else ile Rol Bazlı Yetki Seviyesi

Body'den gelen kullanıcı rolüne göre yetki seviyesi belirleme:

Şablon

#{
var role = body.$.user.role;
if (role == 'admin') {
'TAM_YETKİ'
} else if (role == 'manager') {
'KISITLI_YETKİ'
} else {
'SADECE_OKUMA'
}
}

Satır Yapılandırması

AlanDeğer
Oluşturma ModuTemplate
ŞablonYukarıdaki JEXL Script bloğu
HedefÖzel Değişken → permissionLevel
Varsayılan DeğerSADECE_OKUMA

Sonuç

user.role DeğeripermissionLevel
adminTAM_YETKİ
managerKISITLI_YETKİ
viewer veya diğerSADECE_OKUMA
(boş)SADECE_OKUMA

Örnek 5: Array Body'den İlk Elemana Erişim

İstek body'si doğrudan bir JSON dizisi olduğunda ($[n] söz dizimi):

[
{"id": 101, "name": "Birinci Kayıt"},
{"id": 102, "name": "İkinci Kayıt"}
]

Şablon

#{body.$[0].name}
#{body.$[1].id}

Sonuç

ŞablonÇıktı
#{body.$[0].name}Birinci Kayıt
#{body.$[1].id}102

ipucu

Karmaşık mantık için Script Politikası: JEXL Script döngüler ve basit mantık için uygundur. Dış servise çağrı, kapsamlı veri dönüşümü veya hata yönetimi gerektiren senaryolarda Script politikasını tercih edin.

uyarı

JEXL Script bloğunda { ve } karakterleri dengeli kullanıldığında sorunsuz çalışır. Script içinde bir JSON string üretiyorsanız aynı #{...} bloğunun içinde serbestçe {} kullanabilirsiniz.