View a markdown version of this page

JSONata referencia de expresiones para funciones - AWS Elemental MediaTailor

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

JSONata referencia de expresiones para funciones

Esta página es una referencia completa para la sintaxis de expresiones, los operadores y las funciones disponibles en Functions. Utilícela cuando escriba expresiones para bloques de salida, campos de URL, valores de encabezado, plantillas de cuerpo y condiciones de ejecución.

Delimitadores de expresiones

Cada valor que defina en una función es una constante o una expresión, no una combinación de ambos. MediaTailor distingue entre los dos basándose en los delimitadores.

Sintaxis Tipo Evaluación
https://ads.example.com/vast Constant Se devuelve tal cual sin evaluación.
{%session.client_ip%} Expression Evaluado en tiempo de ejecución. El resultado reemplaza todo el valor.
GET Constant Se devuelve tal cual.
{%'https://ads.example.com/vast?ip=' & session.client_ip%} Expression Evaluado en tiempo de ejecución.
importante

Un valor es completamente una constante o una expresión. No se pueden mezclar los dos en un solo valor. Por ejemplo, hello {%'world'%} no es válido. Para combinar texto estático con valores dinámicos, utilice la concatenación de cadenas dentro de la expresión:. {%'hello ' & 'world'%}

Conceptos básicos del lenguaje

Notación de puntos para la navegación por rutas

Utilice la notación de puntos para recorrer los datos de entrada. Cada punto desciende un nivel en la jerarquía de objetos.

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

Los campos que faltan se devuelven null sin generar ningún error:

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

Concatenación de cadenas con &

El & operador une dos valores de cadena. Non-string los valores se convierten en cadenas automáticamente.

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

Expresiones condicionales (ternarias)

Utilice el operador ternario para devolver uno de los dos valores en función de una condición.

condition ? value_if_true : value_if_false

Ejemplos:

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

Puede anidar expresiones ternarias para ramificarlas en varios sentidos:

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

Enlace de variables con: =

Utilice el := operador entre paréntesis para asignar valores intermedios dentro de una expresión. Las variables enlazadas tienen un alcance hasta los paréntesis adjuntos y no permanecen fuera de la expresión.

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

Los puntos y comas separan las declaraciones entre paréntesis. La última sentencia es el valor devuelto por la expresión.

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

Operadores

Aritmético

Operador Description (Descripción) Ejemplo Resultado
+Suma5 + 38
-Resta10 - 46
*Multiplicación6 * 742
/División15 / 43.75
%Módulo17 % 52
importante

Los valores de entrada de los parámetros del jugador y los datos de la sesión llegan en forma de cadenas. Utilízalos $number() para convertirlos antes de realizar comparaciones numéricas o aritméticas. La comparación de una cadena con un número produce resultados inesperados.

Comparación

Operador Description (Descripción) Ejemplo Resultado
=Igual queresponse.statusCode = 200true
!=No igual queplayer_params.region != 'us-east-1'truesi no es us-east-1
<Menor queavail.index < 3truesi es inferior a 3
>Mayor que$number(player_params.age) > 18truesi es mayor de 18
<=Menor que o igual a$count(items) <= 10truesi tiene 10 o menos
>=Mayor que o igual aresponse.statusCode >= 400truesi es un estado de error

Booleano

Operador Description (Descripción) Ejemplo
andAND lógicoresponse.statusCode = 200 and $exists(response.body.id)
orOR lógicoplayer_params.region = 'us-east-1' or player_params.region = 'us-west-2'

Utilice paréntesis para dar prioridad:

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

Utilícelo $not() para la negación lógica. No hay ningún operador de not palabras clave.

Membresía (en)

El in operador comprueba si existe un valor en una matriz.

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

Encadenamiento (~) >

El operador de encadenamiento pasa el resultado de la expresión de la izquierda como primer argumento a la función de la derecha.

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

Funciones permitidas

MediaTailor admite las siguientes funciones integradas. Cualquier función que no aparezca aquí está bloqueada y provoca un error de validación al crear o actualizar una función.

Conversión de tipos (3)

FunciónDescription (Descripción)EjemploResultado
$string(value)Convertir en cadena$string(200)"200"
$number(value)Convertir en número$number('42')42
$boolean(value)Convertir a booleano$boolean(1)true

Introspección (6)

FunciónDescription (Descripción)EjemploResultado
$length(string)Longitud de cadena$length('hello')5
$count(array)Recuento de elementos de la matriz$count([1, 2, 3])3
$exists(value)Compruebe si el valor existe (no es indefinido)$exists(temp.id)true o false
$keys(object)Obtenga los nombres de las claves de los objetos$keys(response.body)["id", "name"]
$lookup(object, key)Obtenga el valor del objeto por el nombre de la clave$lookup(response.body, 'status')Valor del status campo
$each(object, func)Aplica la función a cada par clave-valor de un objeto$each({"a":1,"b":2}, function($v,$k){$k & '=' & $v})["a=1", "b=2"]

Numérico (7)

FunciónDescription (Descripción)EjemploResultado
$sum(array)Suma de la matriz$sum([1, 2, 3])6
$max(array)Valor máximo$max([10, 5, 20])20
$min(array)Valor mínimo$min([10, 5, 20])5
$average(array)Media aritmética$average([10, 20, 30])20
$abs(number)Valor absoluto$abs(-7)7
$floor(number)Redondea hacia abajo$floor(3.9)3
$round(number, precision)Redondear con precisión$round(3.456, 2)3.46

Cuerda (9)

FunciónDescription (Descripción)EjemploResultado
$uppercase(string)A mayúsculas$uppercase('hello')"HELLO"
$lowercase(string)A minúsculas$lowercase('Hello')"hello"
$trim(string)Eliminar espacios en blanco leading/trailing $trim(' hi ')"hi"
$substring(string, start, length)Extraer la subcadena (basada en cero)$substring('abcdef', 2, 3)"cde"
$contains(string, pattern)Compruebe si la cadena contiene un patrón$contains(session.user_agent, 'CTV')true o false
$match(string, pattern)Compara la cadena con el patrón de expresiones regulares$match('abc-123', /[0-9]+/){"match": "123", ...}
$replace(string, pattern, replacement)Reemplazar el patrón coincidente$replace('hello', 'l', 'r')"herro"
$join(array, separator)Une los elementos de la matriz en una cadena$join(['a','b','c'], ',')"a,b,c"
$split(string, separator)Divide una cadena en una matriz$split('a,b,c', ',')["a", "b", "c"]

Matriz (7)

FunciónDescription (Descripción)EjemploResultado
$append(arr1, arr2)Concatenación de matrices$append([1, 2], [3, 4])[1, 2, 3, 4]
$reverse(array)Orden inverso$reverse([1, 2, 3])[3, 2, 1]
$sort(array)Ordenar matriz$sort([3, 1, 2])[1, 2, 3]
$distinct(array)Eliminación de duplicados$distinct([1, 2, 2, 3])[1, 2, 3]
$map(array, func)Aplica la función a cada elemento$map([1,2,3], function($v){$v*2})[2, 4, 6]
$filter(array, func)Devuelve los elementos en los que la función devuelve el valor verdadero$filter([1,2,3,4], function($v){$v > 2})[3, 4]
$reduce(array, func, init)Reduce la matriz a un solo valor$reduce([1,2,3], function($prev,$val){$prev+$val}, 0)6

Booleano (1)

FunciónDescription (Descripción)EjemploResultado
$not(value)NOT lógico$not(false)true

Aleatorio (1)

FunciónDescription (Descripción)EjemploResultado
$random()Número aleatorio entre 0 (incluido) y 1 (exclusivo)$random() > 0.5 ? 'A' : 'B'"A" o "B"
nota

$random()genera un nuevo valor en cada evaluación. Si necesita el mismo valor aleatorio en varias claves de salida, primero vincúlelo a una variable:($r := $random(); ...).

Date/time (4)

FunciónDescription (Descripción)EjemploResultado
$now()Marca de tiempo actual como cadena ISO 8601$now()"2024-01-15T12:00:00.000Z"
$millis()Marca de tiempo actual en milisegundos desde la época$millis()1705320000000
$toMillis(string)Convierte la cadena ISO 8601 en milisegundos$toMillis('2024-01-15T12:00:00.000Z')1705320000000
$fromMillis(number)Convierte milisegundos en una cadena ISO 8601$fromMillis(1705320000000)"2024-01-15T12:00:00.000Z"

Codificación (6)

FunciónDescription (Descripción)Ejemplo
$encodeUrl(string)Codificación de URL (conserva caracteres estructurales como/,?,&)$encodeUrl('https://example.com/path?q=hello world')
$encodeUrlComponent(string)La URL codifica un solo componente (codifica todos los caracteres especiales)$encodeUrlComponent('a&b=c') → "a%26b%3Dc"
$decodeUrl(string)Decodificar una cadena URL-encoded $decodeUrl('hello%20world') → "hello world"
$decodeUrlComponent(string)Decodificar un componente URL-encoded $decodeUrlComponent('a%26b') → "a&b"
$base64encode(string)Codifica en Base64$base64encode('hello') → "aGVsbG8="
$base64decode(string)Decodificar desde Base64$base64decode('aGVsbG8=') → "hello"
sugerencia

Se usa $encodeUrlComponent() para valores de parámetros de consulta individuales. $encodeUrl()Úselo solo cuando necesite codificar una URL completa sin perder su estructura.

Patrones comunes

Valores alternativos

Proporcione un valor predeterminado cuando es posible que no exista un valor.

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

Construcción dinámica de URL

Crea una URL de servidor de decisiones publicitarias a partir de varias entradas.

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

El código de estado comprueba la salida de HTTP_REQUEST

Proteja los valores de salida contra los errores de HTTP.

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

Conversión numérica a partir de los parámetros del reproductor

Los parámetros del reproductor llegan en forma de cadenas. Conviértelos antes de realizar comparaciones aritméticas o numéricas.

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

Si $number() recibe una cadena no numérica, la devuelve. undefined Combínelo con $exists() cuando el parámetro falte o no sea válido:. ($val := $number(player_params.max_duration); $exists($val) and $val > 30 ? 'long' : 'short')

División de tráfico aleatoria

Asigne espectadores a grupos de experimentos utilizando$random().

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

Clasificación de tipos de dispositivos

Clasifique los dispositivos en función de la cadena del agente de usuario.

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