View a markdown version of this page

Riferimento all'espressione JSonata per le funzioni - AWS Elemental MediaTailor

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Riferimento all'espressione JSonata per le funzioni

Questa pagina è un riferimento completo per la sintassi, gli operatori e le funzioni delle espressioni disponibili in Funzioni. Usala quando scrivi espressioni per blocchi di output, campi URL, valori di intestazione, modelli di corpo e condizioni di esecuzione.

Delimitatori di espressione

Ogni valore definito in una funzione è una costante o un'espressione, non una combinazione di entrambe. MediaTailor distingue tra i due in base ai delimitatori.

Sintassi Tipo Valutazione
https://ads.example.com/vast Costante Restituito così com'è senza alcuna valutazione.
{%session.client_ip%} Expression Valutato in fase di esecuzione. Il risultato sostituisce l'intero valore.
GET Costante Restituito così com'è.
{%'https://ads.example.com/vast?ip=' & session.client_ip%} Expression Valutato in fase di esecuzione.
Importante

Un valore è interamente una costante o interamente un'espressione. Non è possibile combinare i due valori in un unico valore. Ad esempio, hello {%'world'%} non è valido. Per combinare testo statico con valori dinamici, utilizzate la concatenazione di stringhe all'interno dell'espressione:. {%'hello ' & 'world'%}

Nozioni di base sulla lingua

Notazione a punti per la navigazione dei percorsi

Usa la notazione a punti per attraversare i dati di input. Ogni punto scende di un livello nella gerarchia degli oggetti.

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

I campi mancanti vengono restituiti null senza generare un errore:

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

Concatenazione di stringhe con &

L'&operatore unisce due valori di stringa. Non-string i valori vengono convertiti automaticamente in stringhe.

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

espressioni condizionali (ternarie)

Utilizzate l'operatore ternario per restituire uno dei due valori in base a una condizione.

condition ? value_if_true : value_if_false

Esempi:

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

È possibile annidare espressioni ternarie per la ramificazione multidirezionale:

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

Associazione variabile con: =

Utilizzate l':=operatore tra parentesi per assegnare valori intermedi all'interno di un'espressione. Le variabili associate rientrano nell'ambito delle parentesi racchiuse e non persistono all'esterno dell'espressione.

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

I punti e virgola separano le istruzioni tra parentesi. L'ultima istruzione è il valore restituito dall'espressione.

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

Operatori

Aritmetica

Operatore Description Esempio Risultato
+Addizione5 + 38
-Sottrazione10 - 46
*Moltiplicazione6 * 742
/Divisione15 / 43.75
%Modulo17 % 52
Importante

I valori di input dei parametri del giocatore e dei dati della sessione arrivano sotto forma di stringhe. Utilizzateli $number() per convertirli prima dei confronti numerici o dell'aritmetica. Il confronto di una stringa con un numero produce risultati inaspettati.

Confronto

Operatore Description Esempio Risultato
=Equal toresponse.statusCode = 200true
!=Non uguale aplayer_params.region != 'us-east-1'truese non us-east-1
<Less thanavail.index < 3truese inferiore a 3
>Greater than$number(player_params.age) > 18truese più di 18 anni
<=Minore di o uguale a$count(items) <= 10truese 10 o meno
>=Maggiore di o uguale aresponse.statusCode >= 400truese lo stato di errore

Booleano

Operatore Description Esempio
andAND logicoresponse.statusCode = 200 and $exists(response.body.id)
orOR logicoplayer_params.region = 'us-east-1' or player_params.region = 'us-west-2'

Usa le parentesi per avere la precedenza:

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

Utilizzare per la $not() negazione logica. Non esiste un operatore di not parole chiave.

Iscrizione (in)

L'inoperatore verifica se un valore esiste in un array.

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

Concatenamento (~) >

L'operatore di concatenamento passa il risultato dell'espressione a sinistra come primo argomento alla funzione a destra.

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

Funzioni consentite

MediaTailor supporta le seguenti funzioni integrate. Qualsiasi funzione non elencata qui è bloccata e causa un errore di convalida quando si crea o si aggiorna una funzione.

Conversione del tipo (3)

FunzioneDescriptionEsempioRisultato
$string(value)Converti in stringa$string(200)"200"
$number(value)Converti in numero$number('42')42
$boolean(value)Converti in booleano$boolean(1)true

Introspezione (4)

FunzioneDescriptionEsempioRisultato
$length(string)Lunghezza delle stringhe$length('hello')5
$count(array)Conteggio degli elementi dell'array$count([1, 2, 3])3
$exists(value)Controlla se il valore esiste (non è indefinito)$exists(temp.id)true o false
$keys(object)Ottieni i nomi delle chiavi degli oggetti$keys(response.body)["id", "name"]

Numerico (7)

FunzioneDescriptionEsempioRisultato
$sum(array)Somma della matrice$sum([1, 2, 3])6
$max(array)Valore massimo$max([10, 5, 20])20
$min(array)Valore minimo$min([10, 5, 20])5
$average(array)Media aritmetica$average([10, 20, 30])20
$abs(number)Valore assoluto$abs(-7)7
$floor(number)Arrotondare$floor(3.9)3
$round(number, precision)Arrotondato alla precisione$round(3.456, 2)3.46

Corda (7)

FunzioneDescriptionEsempioRisultato
$uppercase(string)Verso le lettere maiuscole$uppercase('hello')"HELLO"
$lowercase(string)In lettere minuscole$lowercase('Hello')"hello"
$trim(string)Rimuovi gli spazi bianchi leading/trailing $trim(' hi ')"hi"
$substring(string, start, length)Estrai la sottostringa (a base zero)$substring('abcdef', 2, 3)"cde"
$contains(string, pattern)Controlla se la stringa contiene uno schema$contains(session.user_agent, 'CTV')true o false
$match(string, pattern)Abbina la stringa al modello regex$match('abc-123', /[0-9]+/){"match": "123", ...}
$replace(string, pattern, replacement)Sostituisci il modello corrispondente$replace('hello', 'l', 'r')"herro"

Matrice (5)

FunzioneDescriptionEsempioRisultato
$append(arr1, arr2)Concatena matrici$append([1, 2], [3, 4])[1, 2, 3, 4]
$reverse(array)Ordine inverso$reverse([1, 2, 3])[3, 2, 1]
$sort(array)Ordina matrice$sort([3, 1, 2])[1, 2, 3]
$distinct(array)Rimozione dei duplicati$distinct([1, 2, 2, 3])[1, 2, 3]
$map(array, func)Applica la funzione a ciascun elemento$map([1,2,3], function($v){$v*2})[2, 4, 6]

Booleano (1)

FunzioneDescriptionEsempioRisultato
$not(value)NOT logico$not(false)true

Casuale (1)

FunzioneDescriptionEsempioRisultato
$random()Numero casuale compreso tra 0 (incluso) e 1 (esclusivo)$random() > 0.5 ? 'A' : 'B'"A" o "B"
Nota

$random()genera un nuovo valore per ogni valutazione. Se hai bisogno dello stesso valore casuale in più chiavi di output, associalo prima a una variabile:($r := $random(); ...).

Date/time (4)

FunzioneDescriptionEsempioRisultato
$now()Timestamp corrente come stringa ISO 8601$now()"2024-01-15T12:00:00.000Z"
$millis()Timestamp corrente in millisecondi dall'epoca$millis()1705320000000
$toMillis(string)Converti la stringa ISO 8601 in millisecondi$toMillis('2024-01-15T12:00:00.000Z')1705320000000
$fromMillis(number)Converti millisecondi in una stringa ISO 8601$fromMillis(1705320000000)"2024-01-15T12:00:00.000Z"

Codifica (6)

FunzioneDescriptionEsempio
$encodeUrl(string)Codifica URL (conserva caratteri strutturali come/,,) ? &$encodeUrl('https://example.com/path?q=hello world')
$encodeUrlComponent(string)L'URL codifica un singolo componente (codifica tutti i caratteri speciali)$encodeUrlComponent('a&b=c')"a%26b%3Dc"
$decodeUrl(string)Decodifica una stringa URL-encoded $decodeUrl('hello%20world')"hello world"
$decodeUrlComponent(string)Decodifica un componente URL-encoded $decodeUrlComponent('a%26b')"a&b"
$base64encode(string)Codifica in Base64$base64encode('hello')"aGVsbG8="
$base64decode(string)Decodifica da Base64$base64decode('aGVsbG8=')"hello"
Suggerimento

Utilizzare $encodeUrlComponent() per i valori dei singoli parametri di interrogazione. $encodeUrl()Utilizzatelo solo quando è necessario codificare un URL completo preservandone la struttura.

Schemi comuni

Valori di fallback

Fornisci un valore predefinito quando un valore potrebbe non esistere.

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

Costruzione dinamica di URL

Crea un URL del server di decisione pubblicitaria partendo da più input.

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

Controlli del codice di stato per l'output di HTTP_REQUEST

Proteggi i valori di output dagli errori HTTP.

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

Conversione numerica dai parametri del giocatore

I parametri del giocatore arrivano sotto forma di stringhe. Convertiteli prima dei confronti aritmetici o numerici.

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

Se $number() riceve una stringa non numerica, restituisce. undefined Combinalo con $exists() quando il parametro potrebbe essere mancante o non valido:. ($val := $number(player_params.max_duration); $exists($val) and $val > 30 ? 'long' : 'short')

Suddivisione casuale del traffico

Assegna gli spettatori ai gruppi di esperimenti utilizzando. $random()

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

Classificazione del tipo di dispositivo

Classificate i dispositivi in base alla stringa dello user agent.

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