View a markdown version of this page

Référence d'expression JSonata pour les fonctions - AWS Elemental MediaTailor

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Référence d'expression JSonata pour les fonctions

Cette page est une référence complète pour la syntaxe des expressions, les opérateurs et les fonctions disponibles dans Functions. Utilisez-le lorsque vous écrivez des expressions pour des blocs de sortie, des champs d'URL, des valeurs d'en-tête, des modèles de corps et des conditions d'exécution.

Délimiteurs d'expressions

Chaque valeur que vous définissez dans une fonction est une constante ou une expression, et non un mélange des deux. MediaTailor fait la distinction entre les deux à l'aide de délimiteurs.

Syntaxe Type Évaluation
https://ads.example.com/vast Constant Renvoyé tel quel sans évaluation.
{%session.client_ip%} Expression Évalué au moment de l'exécution. Le résultat remplace la valeur entière.
GET Constant Renvoyé tel quel.
{%'https://ads.example.com/vast?ip=' & session.client_ip%} Expression Évalué au moment de l'exécution.
Important

Une valeur est soit entièrement une constante, soit entièrement une expression. Vous ne pouvez pas mélanger les deux en une seule valeur. Par exemple, hello {%'world'%} n’est pas valide. Pour associer du texte statique à des valeurs dynamiques, utilisez la concaténation de chaînes dans l'expression :. {%'hello ' & 'world'%}

Bases de la langue

Notation par points pour la navigation sur le chemin

Utilisez la notation par points pour parcourir les données d'entrée. Chaque point descend d'un niveau dans la hiérarchie des objets.

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

Les champs manquants sont null renvoyés sans générer d'erreur :

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

Concaténation de chaînes avec &

L'&opérateur joint deux valeurs de chaîne. Non-string les valeurs sont automatiquement converties en chaînes.

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

Expressions conditionnelles (ternaires)

Utilisez l'opérateur ternaire pour renvoyer l'une des deux valeurs en fonction d'une condition.

condition ? value_if_true : value_if_false

Exemples :

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

Vous pouvez imbriquer des expressions ternaires pour le branchement multidirectionnel :

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

Liaison de variables avec : =

Utilisez l':=opérateur entre parenthèses pour attribuer des valeurs intermédiaires dans une expression. Les variables liées sont limitées aux parenthèses qui les entourent et ne persistent pas en dehors de l'expression.

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

Des points-virgules séparent les instructions entre parenthèses. La dernière instruction est la valeur renvoyée par l'expression.

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

Opérateurs

Arithmétique

Opérateur Description Exemple Résultat
+Addition5 + 38
-Soustraction10 - 46
*Multiplication6 * 742
/Division15 / 43.75
%Modulo17 % 52
Important

Les valeurs d'entrée provenant des paramètres du joueur et des données de session arrivent sous forme de chaînes. Utilisez-le $number() pour les convertir avant les comparaisons numériques ou arithmétiques. La comparaison d'une chaîne à un nombre produit des résultats inattendus.

Comparison (Comparaison)

Opérateur Description Exemple Résultat
=Egal àresponse.statusCode = 200true
!=Non égal àplayer_params.region != 'us-east-1'truesi ce n'est pas us-east-1
<Inférieur àavail.index < 3truesi inférieur à 3
>Supérieur à$number(player_params.age) > 18truesi vous avez plus de 18 ans
<=Inférieur ou égal à$count(items) <= 10truesi 10 ou moins
>=Supérieur ou égal àresponse.statusCode >= 400trueen cas d'état d'erreur

Booléen

Opérateur Description Exemple
andET logiqueresponse.statusCode = 200 and $exists(response.body.id)
orOU logiqueplayer_params.region = 'us-east-1' or player_params.region = 'us-west-2'

Utilisez des parenthèses pour la priorité :

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

À utiliser $not() pour une négation logique. Il n'existe aucun opérateur de not mot clé.

Adhésion (en)

L'inopérateur teste si une valeur existe dans un tableau.

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

Enchaînement (~ >)

L'opérateur de chaînage transmet le résultat de l'expression de gauche comme premier argument à la fonction de droite.

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

Fonctions autorisées

MediaTailor prend en charge les fonctions intégrées suivantes. Toute fonction non répertoriée ici est bloquée et provoque une erreur de validation lorsque vous créez ou mettez à jour une fonction.

Conversion de type (3)

FonctionDescriptionExempleRésultat
$string(value)Convertir en chaîne$string(200)"200"
$number(value)Convertir en nombre$number('42')42
$boolean(value)Convertir en booléen$boolean(1)true

Introspection (4)

FonctionDescriptionExempleRésultat
$length(string)String length$length('hello')5
$count(array)Nombre d'éléments du tableau$count([1, 2, 3])3
$exists(value)Vérifiez si la valeur existe (non indéfinie)$exists(temp.id)true ou false
$keys(object)Obtenir les noms des clés des objets$keys(response.body)["id", "name"]

Numérique (7)

FonctionDescriptionExempleRésultat
$sum(array)Somme du tableau$sum([1, 2, 3])6
$max(array)Valeur maximale$max([10, 5, 20])20
$min(array)Valeur minimale$min([10, 5, 20])5
$average(array)Moyenne arithmétique$average([10, 20, 30])20
$abs(number)Valeur absolue$abs(-7)7
$floor(number)Arrondir vers le bas$floor(3.9)3
$round(number, precision)Du rond à la précision$round(3.456, 2)3.46

Corde (7)

FonctionDescriptionExempleRésultat
$uppercase(string)Vers les majuscules$uppercase('hello')"HELLO"
$lowercase(string)Vers les minuscules$lowercase('Hello')"hello"
$trim(string)Supprimer les espaces leading/trailing blancs$trim(' hi ')"hi"
$substring(string, start, length)Extraire une sous-chaîne (base zéro)$substring('abcdef', 2, 3)"cde"
$contains(string, pattern)Vérifiez si la chaîne contient un motif$contains(session.user_agent, 'CTV')true ou false
$match(string, pattern)Faire correspondre la chaîne au modèle regex$match('abc-123', /[0-9]+/){"match": "123", ...}
$replace(string, pattern, replacement)Remplacer le modèle correspondant$replace('hello', 'l', 'r')"herro"

Réseau (5)

FonctionDescriptionExempleRésultat
$append(arr1, arr2)Concaténation de tableaux$append([1, 2], [3, 4])[1, 2, 3, 4]
$reverse(array)Ordre inversé$reverse([1, 2, 3])[3, 2, 1]
$sort(array)Tableau de tri$sort([3, 1, 2])[1, 2, 3]
$distinct(array)Suppression des doublons$distinct([1, 2, 2, 3])[1, 2, 3]
$map(array, func)Appliquer une fonction à chaque élément$map([1,2,3], function($v){$v*2})[2, 4, 6]

Booléen (1)

FonctionDescriptionExempleRésultat
$not(value)Logique : NON$not(false)true

Aléatoire (1)

FonctionDescriptionExempleRésultat
$random()Nombre aléatoire compris entre 0 (inclus) et 1 (exclusif)$random() > 0.5 ? 'A' : 'B'"A" ou "B"
Note

$random()génère une nouvelle valeur à chaque évaluation. Si vous avez besoin de la même valeur aléatoire dans plusieurs clés de sortie, liez-la d'abord à une variable :($r := $random(); ...).

Date/time (4)

FonctionDescriptionExempleRésultat
$now()Horodatage actuel sous forme de chaîne ISO 8601$now()"2024-01-15T12:00:00.000Z"
$millis()Horodatage actuel en millisecondes depuis Epoch$millis()1705320000000
$toMillis(string)Convertir une chaîne ISO 8601 en millisecondes$toMillis('2024-01-15T12:00:00.000Z')1705320000000
$fromMillis(number)Convertir les millisecondes en chaîne ISO 8601$fromMillis(1705320000000)"2024-01-15T12:00:00.000Z"

Encodage (6)

FonctionDescriptionExemple
$encodeUrl(string)Encodage d'URL (préserve les caractères structurels tels que/,?,&)$encodeUrl('https://example.com/path?q=hello world')
$encodeUrlComponent(string)Encode par URL un seul composant (code tous les caractères spéciaux)$encodeUrlComponent('a&b=c')"a%26b%3Dc"
$decodeUrl(string)Décoder une chaîne URL-encoded $decodeUrl('hello%20world')"hello world"
$decodeUrlComponent(string)Décoder un composant URL-encoded $decodeUrlComponent('a%26b')"a&b"
$base64encode(string)Encoder en Base64$base64encode('hello')"aGVsbG8="
$base64decode(string)Décoder depuis Base64$base64decode('aGVsbG8=')"hello"
Astuce

À utiliser $encodeUrlComponent() pour les valeurs de paramètres de requête individuels. À utiliser $encodeUrl() uniquement lorsque vous devez encoder une URL complète tout en préservant sa structure.

Schémas courants

Valeurs de repli

Indiquez une valeur par défaut lorsqu'une valeur n'existe peut-être pas.

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

Construction d'URL dynamique

Créez une URL de serveur de décision publicitaire à partir de plusieurs entrées.

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

Vérifications du code d'état pour la sortie HTTP_REQUEST

Protégez les valeurs de sortie contre les défaillances HTTP.

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

Conversion numérique à partir des paramètres du joueur

Les paramètres du joueur arrivent sous forme de chaînes. Convertissez-les avant les comparaisons arithmétiques ou numériques.

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

S'il $number() reçoit une chaîne non numérique, il renvoie. undefined Combinez-le avec le $exists() cas où le paramètre est peut-être manquant ou non valide :($val := $number(player_params.max_duration); $exists($val) and $val > 30 ? 'long' : 'short').

Répartition aléatoire du trafic

Assignez des spectateurs à des groupes d'expériences en utilisant$random().

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

Classification des types d'appareils

Classez les appareils en fonction de la chaîne de l'agent utilisateur.

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