View a markdown version of this page

JSONata-Ausdrucksreferenz für Funktionen - AWS Elemental MediaTailor

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

JSONata-Ausdrucksreferenz für Funktionen

Diese Seite enthält eine vollständige Referenz zur Ausdruckssyntax, zu Operatoren und Funktionen, die in Funktionen verfügbar sind. Verwenden Sie es, wenn Sie Ausdrücke für Ausgabeblöcke, URL-Felder, Header-Werte, Textvorlagen und Ausführungsbedingungen schreiben.

Trennzeichen für Ausdrücke

Jeder Wert, den Sie in einer Funktion definieren, ist entweder eine Konstante oder ein Ausdruck — keine Mischung aus beidem. MediaTailor unterscheidet anhand von Trennzeichen zwischen den beiden.

Syntax Typ Bewertung
https://ads.example.com/vast Konstante Ohne Bewertung unverändert zurückgegeben.
{%session.client_ip%} Expression Zur Laufzeit ausgewertet. Das Ergebnis ersetzt den gesamten Wert.
GET Konstante Unverändert zurückgegeben.
{%'https://ads.example.com/vast?ip=' & session.client_ip%} Expression Zur Laufzeit ausgewertet.
Wichtig

Ein Wert ist entweder eine vollständige Konstante oder ein vollständiger Ausdruck. Sie können die beiden nicht in einem einzigen Wert mischen. Beispielsweise ist hello {%'world'%} nicht gültig. Um statischen Text mit dynamischen Werten zu kombinieren, verwenden Sie die Zeichenkettenverkettung innerhalb des Ausdrucks:. {%'hello ' & 'world'%}

Grundlagen der Sprache

Punktnotation für die Pfadnavigation

Verwenden Sie die Punktnotation, um die Eingabedaten zu durchqueren. Jeder Punkt steigt eine Ebene in der Objekthierarchie ab.

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

Fehlende Felder werden zurückgegeben, null ohne dass ein Fehler ausgelöst wird:

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

Verkettung von Zeichenketten mit &

Der & Operator verknüpft zwei Zeichenkettenwerte. Non-string Werte werden automatisch in Zeichenketten umgewandelt.

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

Bedingte (ternäre) Ausdrücke

Verwenden Sie den ternären Operator, um einen von zwei Werten auf der Grundlage einer Bedingung zurückzugeben.

condition ? value_if_true : value_if_false

Beispiele:

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

Sie können ternäre Ausdrücke verschachteln, um eine Verzweigung in mehrere Richtungen zu ermöglichen:

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

Variablenbindung mit: =

Verwenden Sie den := Operator in Klammern, um Zwischenwerte innerhalb eines Ausdrucks zuzuweisen. Gebundene Variablen sind auf die umschließenden Klammern beschränkt und bleiben außerhalb des Ausdrucks nicht bestehen.

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

Semikolons trennen Anweisungen in Klammern voneinander. Die letzte Anweisung ist der Rückgabewert des Ausdrucks.

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

Operatoren

Arithmetisch

Operator Beschreibung Beispiel Ergebnis
+Addition5 + 38
-Subtraktion10 - 46
*Multiplikation6 * 742
/Division15 / 43.75
%Modulo17 % 52
Wichtig

Eingabewerte aus Spielerparametern und Sitzungsdaten kommen als Zeichenketten an. Wird verwendet$number(), um sie vor numerischen Vergleichen oder Arithmetik zu konvertieren. Der Vergleich einer Zeichenfolge mit einer Zahl führt zu unerwarteten Ergebnissen.

Vergleich

Operator Beschreibung Beispiel Ergebnis
=gleichresponse.statusCode = 200true
!=Nicht gleichplayer_params.region != 'us-east-1'truewenn nicht us-east-1
<Kleiner alsavail.index < 3truewenn unter 3
>Größer als$number(player_params.age) > 18truewenn über 18
<=Kleiner als oder gleich$count(items) <= 10truewenn 10 oder weniger
>=Größer als oder gleichresponse.statusCode >= 400truewenn Fehlerstatus

Boolesch

Operator Beschreibung Beispiel
andLogisches UNDresponse.statusCode = 200 and $exists(response.body.id)
orLogisches ODERplayer_params.region = 'us-east-1' or player_params.region = 'us-west-2'

Verwenden Sie Klammern für den Vorrang:

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

Wird $not() für logische Negation verwendet. Es gibt keinen not Schlüsselwort-Operator.

Mitgliedschaft (in)

Der in Operator testet, ob ein Wert in einem Array existiert.

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

Verkettung (~) >

Der Verkettungsoperator übergibt das Ergebnis des linken Ausdrucks als erstes Argument an die Funktion auf der rechten Seite.

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

Zulässige Funktionen

MediaTailor unterstützt die folgenden integrierten Funktionen. Jede Funktion, die hier nicht aufgeführt ist, ist blockiert und verursacht einen Validierungsfehler, wenn Sie eine Funktion erstellen oder aktualisieren.

Typkonvertierung (3)

FunktionDescriptionBeispielErgebnis
$string(value)In eine Zeichenfolge umwandeln$string(200)"200"
$number(value)In eine Zahl umwandeln$number('42')42
$boolean(value)In einen booleschen Wert umwandeln$boolean(1)true

Selbstbeobachtung (4)

FunktionDescriptionBeispielErgebnis
$length(string)Länge der Zeichenfolge$length('hello')5
$count(array)Anzahl der Array-Elemente$count([1, 2, 3])3
$exists(value)Prüfen Sie, ob ein Wert existiert (nicht undefiniert)$exists(temp.id)true oder false
$keys(object)Ruft Objektschlüsselnamen ab$keys(response.body)["id", "name"]

Numerisch (7)

FunktionDescriptionBeispielErgebnis
$sum(array)Summe des Arrays$sum([1, 2, 3])6
$max(array)Maximaler Wert$max([10, 5, 20])20
$min(array)Mindestwert$min([10, 5, 20])5
$average(array)Arithmetisches Mittel$average([10, 20, 30])20
$abs(number)Absoluter Wert$abs(-7)7
$floor(number)Abrunden$floor(3.9)3
$round(number, precision)Präzise abrunden$round(3.456, 2)3.46

Schnur (7)

FunktionDescriptionBeispielErgebnis
$uppercase(string)In Großbuchstaben$uppercase('hello')"HELLO"
$lowercase(string)In Kleinbuchstaben$lowercase('Hello')"hello"
$trim(string)Leerzeichen entfernen leading/trailing $trim(' hi ')"hi"
$substring(string, start, length)Extrahieren Sie eine Teilzeichenfolge (auf Null basierend)$substring('abcdef', 2, 3)"cde"
$contains(string, pattern)Prüfen Sie, ob die Zeichenfolge ein Muster enthält$contains(session.user_agent, 'CTV')true oder false
$match(string, pattern)Ordne die Zeichenfolge dem Regex-Muster zu$match('abc-123', /[0-9]+/){"match": "123", ...}
$replace(string, pattern, replacement)Ersetze das passende Muster$replace('hello', 'l', 'r')"herro"

Reihe (5)

FunktionDescriptionBeispielErgebnis
$append(arr1, arr2)Arrays verketten$append([1, 2], [3, 4])[1, 2, 3, 4]
$reverse(array)Reihenfolge umkehren$reverse([1, 2, 3])[3, 2, 1]
$sort(array)Array sortieren$sort([3, 1, 2])[1, 2, 3]
$distinct(array)Entfernen von Duplizierungen$distinct([1, 2, 2, 3])[1, 2, 3]
$map(array, func)Wenden Sie die Funktion auf jedes Element an$map([1,2,3], function($v){$v*2})[2, 4, 6]

Boolescher Wert (1)

FunktionDescriptionBeispielErgebnis
$not(value)Logisch NICHT$not(false)true

Zufällig (1)

FunktionDescriptionBeispielErgebnis
$random()Zufallszahl zwischen 0 (inklusive) und 1 (exklusiv)$random() > 0.5 ? 'A' : 'B'"A" oder "B"
Anmerkung

$random()generiert bei jeder Auswertung einen neuen Wert. Wenn Sie denselben Zufallswert in mehreren Ausgabeschlüsseln benötigen, binden Sie ihn zuerst an eine Variable:($r := $random(); ...).

Date/time (4)

FunktionDescriptionBeispielErgebnis
$now()Aktueller Zeitstempel als ISO-8601-Zeichenfolge$now()"2024-01-15T12:00:00.000Z"
$millis()Aktueller Zeitstempel in Millisekunden seit der Epoche$millis()1705320000000
$toMillis(string)Konvertiert die ISO 8601-Zeichenfolge in Millisekunden$toMillis('2024-01-15T12:00:00.000Z')1705320000000
$fromMillis(number)Konvertiert Millisekunden in eine ISO-8601-Zeichenfolge$fromMillis(1705320000000)"2024-01-15T12:00:00.000Z"

Kodierung (6)

FunktionDescriptionBeispiel
$encodeUrl(string)URL-Kodierung (behält Strukturzeichen wie/,, ? bei) &$encodeUrl('https://example.com/path?q=hello world')
$encodeUrlComponent(string)URL-Kodierung einer einzelnen Komponente (kodiert alle Sonderzeichen)$encodeUrlComponent('a&b=c')"a%26b%3Dc"
$decodeUrl(string)Dekodieren Sie eine Zeichenfolge URL-encoded $decodeUrl('hello%20world')"hello world"
$decodeUrlComponent(string)Dekodieren Sie eine Komponente URL-encoded $decodeUrlComponent('a%26b')"a&b"
$base64encode(string)Auf Base64 codieren$base64encode('hello')"aGVsbG8="
$base64decode(string)Von Base64 dekodieren$base64decode('aGVsbG8=')"hello"
Tipp

Wird $encodeUrlComponent() für einzelne Abfrageparameterwerte verwendet. Verwenden Sie diese Option $encodeUrl() nur, wenn Sie eine vollständige URL unter Beibehaltung ihrer Struktur kodieren müssen.

Allgemeine Muster

Ausweichwerte

Geben Sie einen Standardwert an, wenn ein Wert möglicherweise nicht existiert.

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

Dynamische URL-Konstruktion

Erstellen Sie eine URL für einen Anzeigenentscheidungsserver aus mehreren Eingaben.

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

Der Statuscode überprüft die HTTP_REQUEST-Ausgabe

Schützt Ausgabewerte vor HTTP-Fehlern.

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

Numerische Konvertierung von Player-Parametern

Spielerparameter kommen als Zeichenketten an. Konvertiert sie vor arithmetischen oder numerischen Vergleichen.

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

Wenn eine nicht numerische Zeichenfolge $number() empfangen wird, wird sie zurückgegeben. undefined Kombinieren Sie es mit $exists() dem Fall, dass der Parameter möglicherweise fehlt oder ungültig ist:($val := $number(player_params.max_duration); $exists($val) and $val > 30 ? 'long' : 'short').

Zufällige Aufteilung des Datenverkehrs

Weisen Sie Zuschauern Versuchsgruppen zu mithilfe von$random().

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

Klassifizierung des Gerätetyps

Klassifizieren Sie Geräte anhand der Benutzeragent-Zeichenfolge.

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