View a markdown version of this page

Referensi ekspresi Jsonata untuk Fungsi - AWS Elemental MediaTailor

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Referensi ekspresi Jsonata untuk Fungsi

Halaman ini adalah referensi lengkap untuk sintaks ekspresi, operator, dan fungsi yang tersedia di Fungsi. Gunakan saat Anda menulis ekspresi untuk blok keluaran, bidang URL, nilai header, templat tubuh, dan kondisi jalankan.

Pembatas ekspresi

Setiap nilai yang Anda definisikan dalam suatu fungsi adalah konstanta atau ekspresi - bukan campuran keduanya. MediaTailor membedakan antara keduanya berdasarkan pembatas.

Sintaksis Tipe Evaluasi
https://ads.example.com/vast Konstan Dikembalikan apa adanya tanpa evaluasi.
{%session.client_ip%} Ekspresi Dievaluasi saat runtime. Hasilnya menggantikan seluruh nilai.
GET Konstan Kembali apa adanya.
{%'https://ads.example.com/vast?ip=' & session.client_ip%} Ekspresi Dievaluasi saat runtime.
penting

Nilai adalah sama sekali konstan atau seluruhnya ekspresi. Anda tidak dapat mencampur keduanya dalam satu nilai. Misalnya, hello {%'world'%} tidak valid. Untuk menggabungkan teks statis dengan nilai dinamis, gunakan rangkaian string di dalam ekspresi:. {%'hello ' & 'world'%}

Dasar-dasar bahasa

Notasi titik untuk navigasi jalur

Gunakan notasi titik untuk melintasi data input. Setiap titik turun satu tingkat ke dalam hierarki objek.

session.client_ip → the viewer's IP address response.body.envelope → a field inside a parsed JSON response player_params.campaign_id → a player parameter

Bidang yang hilang kembali null tanpa menimbulkan kesalahan:

temp.nonExistent → null temp.nonExistent.deeply.nested → null

Rangkaian string dengan &

&Operator menggabungkan dua nilai string. Non-string nilai dikonversi ke string secara otomatis.

'https://ads.example.com/vast?ip=' & session.client_ip → "https://ads.example.com/vast?ip=192.0.2.1" 'duration=' & 30 → "duration=30"

Ekspresi bersyarat (ternary)

Gunakan operator ternary untuk mengembalikan salah satu dari dua nilai berdasarkan suatu kondisi.

condition ? value_if_true : value_if_false

Contoh:

$exists(player_params.env) ? player_params.env : 'prod' response.statusCode = 200 ? response.body.id : 'unknown' $random() > 0.5 ? 'groupA' : 'groupB'

Anda dapat membuat sarang ekspresi ternary untuk percabangan multi-arah:

$contains(session.user_agent, 'CTV') ? 'ctv' : $contains(session.user_agent, 'Mobile') ? 'mobile' : 'desktop'

Pengikatan variabel dengan: =

Gunakan := operator di dalam tanda kurung untuk menetapkan nilai perantara dalam ekspresi. Variabel terikat dicakup ke tanda kurung terlampir dan tidak bertahan di luar ekspresi.

( $base := 'https://ads.example.com'; $base & '/vast?ip=' & session.client_ip )

Titik koma memisahkan pernyataan di dalam tanda kurung. Pernyataan terakhir adalah nilai kembali ekspresi.

( $code := response.statusCode; $code != null and $code >= 200 and $code < 300 ? response.body.value : 'fallback' )

Operator

Aritmatika

Operator Deskripsi Contoh Hasil
+Penambahan5 + 38
-Pengurangan10 - 46
*Perkalian6 * 742
/Pembagian15 / 43.75
%Modulo17 % 52
penting

Nilai input dari parameter pemain dan data sesi tiba sebagai string. Gunakan $number() untuk mengonversinya sebelum perbandingan numerik atau aritmatika. Membandingkan string dengan angka menghasilkan hasil yang tidak terduga.

Perbandingan

Operator Deskripsi Contoh Hasil
=Sama denganresponse.statusCode = 200true
!=Tidak sama denganplayer_params.region != 'us-east-1'truejika tidak us-east-1
<Kurang dariavail.index < 3truejika di bawah 3
>Lebih besar dari$number(player_params.age) > 18truejika lebih dari 18
<=Kurang dari atau sama$count(items) <= 10truejika 10 atau kurang
>=Lebih besar dari atau samaresponse.statusCode >= 400truejika status kesalahan

Boolean

Operator Deskripsi Contoh
andLogis DANresponse.statusCode = 200 and $exists(response.body.id)
orLogis ATAUplayer_params.region = 'us-east-1' or player_params.region = 'us-west-2'

Gunakan tanda kurung untuk diutamakan:

score > 0.5 and (tier = 'premium' or tier = 'gold')
catatan

Gunakan $not() untuk negasi logis. Tidak ada operator not kata kunci.

Keanggotaan (dalam)

inOperator menguji apakah nilai ada dalam array.

'premium' in segments → true if segments contains 'premium' player_params.region in ['us-east-1', 'us-west-2'] → true

Rantai (~ >)

Operator rantai meneruskan hasil ekspresi tangan kiri sebagai argumen pertama ke fungsi di sebelah kanan.

session.user_agent ~> $lowercase ~> $trim → equivalent to $trim($lowercase(session.user_agent))

Fungsi yang diizinkan

MediaTailor mendukung fungsi bawaan berikut. Fungsi apa pun yang tidak tercantum di sini diblokir dan menyebabkan kesalahan validasi saat Anda membuat atau memperbarui fungsi.

Jenis konversi (3)

FungsiDeskripsiContohHasil
$string(value)Konversi ke string$string(200)"200"
$number(value)Konversi ke angka$number('42')42
$boolean(value)Konversi ke boolean$boolean(1)true

Introspeksi (4)

FungsiDeskripsiContohHasil
$length(string)Panjang tali$length('hello')5
$count(array)Jumlah elemen array$count([1, 2, 3])3
$exists(value)Periksa apakah nilai ada (tidak terdefinisi)$exists(temp.id)true atau false
$keys(object)Dapatkan nama kunci objek$keys(response.body)["id", "name"]

Numerik (7)

FungsiDeskripsiContohHasil
$sum(array)Jumlah array$sum([1, 2, 3])6
$max(array)Nilai maksimum$max([10, 5, 20])20
$min(array)Nilai minimum$min([10, 5, 20])5
$average(array)Aritmatika berarti$average([10, 20, 30])20
$abs(number)Nilai absolut$abs(-7)7
$floor(number)Bulatkan ke bawah$floor(3.9)3
$round(number, precision)Putaran ke presisi$round(3.456, 2)3.46

Tali (7)

FungsiDeskripsiContohHasil
$uppercase(string)Untuk huruf besar$uppercase('hello')"HELLO"
$lowercase(string)Untuk huruf kecil$lowercase('Hello')"hello"
$trim(string)Hapus leading/trailing spasi$trim(' hi ')"hi"
$substring(string, start, length)Ekstrak substring (berbasis nol)$substring('abcdef', 2, 3)"cde"
$contains(string, pattern)Periksa apakah string berisi pola$contains(session.user_agent, 'CTV')true atau false
$match(string, pattern)Cocokkan string dengan pola regex$match('abc-123', /[0-9]+/){"match": "123", ...}
$replace(string, pattern, replacement)Ganti pola pencocokan$replace('hello', 'l', 'r')"herro"

Array (5)

FungsiDeskripsiContohHasil
$append(arr1, arr2)Array gabungan$append([1, 2], [3, 4])[1, 2, 3, 4]
$reverse(array)Urutan terbalik$reverse([1, 2, 3])[3, 2, 1]
$sort(array)Urutkan array$sort([3, 1, 2])[1, 2, 3]
$distinct(array)Hapus duplikat$distinct([1, 2, 2, 3])[1, 2, 3]
$map(array, func)Menerapkan fungsi untuk setiap elemen$map([1,2,3], function($v){$v*2})[2, 4, 6]

Boolean (1)

FungsiDeskripsiContohHasil
$not(value)Logis TIDAK$not(false)true

Acak (1)

FungsiDeskripsiContohHasil
$random()Nomor acak antara 0 (inklusif) dan 1 (eksklusif)$random() > 0.5 ? 'A' : 'B'"A" atau "B"
catatan

$random()menghasilkan nilai baru pada setiap evaluasi. Jika Anda membutuhkan nilai acak yang sama di beberapa tombol keluaran, ikat ke variabel terlebih dahulu:($r := $random(); ...).

Date/time (4)

FungsiDeskripsiContohHasil
$now()Stempel waktu saat ini sebagai string ISO 8601$now()"2024-01-15T12:00:00.000Z"
$millis()Stempel waktu saat ini sebagai milidetik sejak zaman$millis()1705320000000
$toMillis(string)Mengkonversi ISO 8601 string ke milidetik$toMillis('2024-01-15T12:00:00.000Z')1705320000000
$fromMillis(number)Mengkonversi milidetik ke ISO 8601 string$fromMillis(1705320000000)"2024-01-15T12:00:00.000Z"

Pengkodean (6)

FungsiDeskripsiContoh
$encodeUrl(string)URL encode (mempertahankan karakter struktural seperti/,,?) &$encodeUrl('https://example.com/path?q=hello world')
$encodeUrlComponent(string)URL menyandikan satu komponen (mengkodekan semua karakter khusus)$encodeUrlComponent('a&b=c')"a%26b%3Dc"
$decodeUrl(string)Mendekode string URL-encoded $decodeUrl('hello%20world')"hello world"
$decodeUrlComponent(string)Mendekode komponen URL-encoded $decodeUrlComponent('a%26b')"a&b"
$base64encode(string)Encode ke Base64$base64encode('hello')"aGVsbG8="
$base64decode(string)Dekode dari Base64$base64decode('aGVsbG8=')"hello"
Tip

Gunakan $encodeUrlComponent() untuk nilai parameter kueri individu. Gunakan $encodeUrl() hanya ketika Anda perlu menyandikan URL lengkap sambil mempertahankan strukturnya.

Pola umum

Nilai mundur

Berikan default ketika nilai mungkin tidak ada.

{%$exists(player_params.region) ? player_params.region : 'us-east-1'%}

Konstruksi URL dinamis

Buat URL server keputusan iklan dari beberapa input.

{%'https://ads.example.com/v1/vast?ip=' & $encodeUrlComponent(session.client_ip) & '&ua=' & $encodeUrlComponent(session.user_agent) & '&sid=' & session.id%}

Pemeriksaan kode status untuk output HTTP_REQUEST

Menjaga nilai output terhadap kegagalan HTTP.

{%response.statusCode != null and response.statusCode = 200 ? response.body.envelope : 'default-envelope'%}

Konversi numerik dari parameter pemain

Parameter pemain tiba sebagai string. Konversikan mereka sebelum perbandingan aritmatika atau numerik.

{%$number(player_params.max_duration) > 30 ? 'long' : 'short'%}
penting

Jika $number() menerima string non-numerik, ia kembali. undefined Gabungkan dengan $exists() ketika parameter mungkin hilang atau tidak valid:. ($val := $number(player_params.max_duration); $exists($val) and $val > 30 ? 'long' : 'short')

Pemisahan lalu lintas acak

Tetapkan pemirsa ke grup eksperimen menggunakan$random().

{%$random() > 0.5 ? 'https://ads.example.com/v1/vast-a' : 'https://ads.example.com/v1/vast-b'%}

Klasifikasi jenis perangkat

Klasifikasi perangkat berdasarkan string agen pengguna.

{%$contains(session.user_agent, 'CTV') ? 'ctv' : $contains(session.user_agent, 'Mobile') ? 'mobile' : 'desktop'%}