As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Referência de expressão JSonata para Funções
Esta página é uma referência completa para a sintaxe da expressão, operadores e funções disponíveis em Funções. Use-o ao escrever expressões para blocos de saída, campos de URL, valores de cabeçalho, modelos de corpo e condições de execução.
Delimitadores de expressão
Cada valor que você define em uma função é uma constante ou uma expressão, não uma mistura dos dois. MediaTailor distingue entre os dois com base em delimitadores.
| Sintaxe | Tipo | Avaliação |
|---|---|---|
https://ads.example.com/vast |
Constante | Retornado no estado em que se encontra, sem avaliação. |
{%session.client_ip%} |
Expressão | Avaliado em tempo de execução. O resultado substitui o valor inteiro. |
GET |
Constante | Devolvido como está. |
{%'https://ads.example.com/vast?ip=' &
session.client_ip%} |
Expressão | Avaliado em tempo de execução. |
Importante
Um valor é inteiramente uma constante ou inteiramente uma expressão. Você não pode misturar os dois em um único valor. Por exemplo, hello {%'world'%} não é válido. Para combinar texto estático com valores dinâmicos, use a concatenação de strings dentro da expressão:. {%'hello ' & 'world'%}
Fundamentos da linguagem
Notação de pontos para navegação por caminhos
Use a notação de pontos para percorrer os dados de entrada. Cada ponto desce um nível na hierarquia do objeto.
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
Os campos ausentes retornam null sem gerar um erro:
temp.nonExistent → null temp.nonExistent.deeply.nested → null
Concatenação de strings com &
O & operador une dois valores de cadeia de caracteres. Non-string os valores são convertidos em cadeias de caracteres automaticamente.
'https://ads.example.com/vast?ip=' & session.client_ip → "https://ads.example.com/vast?ip=192.0.2.1" 'duration=' & 30 → "duration=30"
Expressões condicionais (ternárias)
Use o operador ternário para retornar um dos dois valores com base em uma condição.
condition ? value_if_true : value_if_false
Exemplos:
$exists(player_params.env) ? player_params.env : 'prod' response.statusCode = 200 ? response.body.id : 'unknown' $random() > 0.5 ? 'groupA' : 'groupB'
Você pode aninhar expressões ternárias para ramificação multidirecional:
$contains(session.user_agent, 'CTV') ? 'ctv' : $contains(session.user_agent, 'Mobile') ? 'mobile' : 'desktop'
Vinculação variável com: =
Use o := operador entre parênteses para atribuir valores intermediários em uma expressão. As variáveis vinculadas têm como escopo os parênteses delimitados e não persistem fora da expressão.
( $base := 'https://ads.example.com'; $base & '/vast?ip=' & session.client_ip )
O ponto e vírgula separa as declarações entre parênteses. A última declaração é o valor de retorno da expressão.
( $code := response.statusCode; $code != null and $code >= 200 and $code < 300 ? response.body.value : 'fallback' )
Operadores
Aritmética
| Operador | Description | Exemplo | Resultado |
|---|---|---|---|
+ | Adição | 5 + 3 | 8 |
- | Subtração | 10 - 4 | 6 |
* | Multiplicação | 6 * 7 | 42 |
/ | Divisão | 15 / 4 | 3.75 |
% | Módulo | 17 % 5 | 2 |
Importante
Os valores de entrada dos parâmetros do player e dos dados da sessão chegam como strings. Use $number() para convertê-los antes de comparações numéricas ou aritméticas. A comparação de uma string com um número produz resultados inesperados.
Comparação
| Operador | Description | Exemplo | Resultado |
|---|---|---|---|
= | Igual a | response.statusCode = 200 | true |
!= | Não é igual a | player_params.region != 'us-east-1' | truese não us-east-1 |
< | Menor que | avail.index < 3 | truese abaixo de 3 |
> | Maior que | $number(player_params.age) > 18 | truese tiver mais de 18 anos |
<= | Menor ou igual a | $count(items) <= 10 | truese 10 ou menos |
>= | Maior ou igual a | response.statusCode >= 400 | truese o status do erro |
Booleano
| Operador | Description | Exemplo |
|---|---|---|
and | AND lógico | response.statusCode = 200 and $exists(response.body.id) |
or | OR lógico | player_params.region = 'us-east-1' or player_params.region = 'us-west-2' |
Use parênteses para precedência:
score > 0.5 and (tier = 'premium' or tier = 'gold')
nota
Use $not() para negação lógica. Não há operador de not palavra-chave.
Filiação (em)
O in operador testa se existe um valor em uma matriz.
'premium' in segments → true if segments contains 'premium' player_params.region in ['us-east-1', 'us-west-2'] → true
Encadeamento (~) >
O operador de encadeamento passa o resultado da expressão à esquerda como o primeiro argumento para a função à direita.
session.user_agent ~> $lowercase ~> $trim → equivalent to $trim($lowercase(session.user_agent))
Funções permitidas
MediaTailor suporta as seguintes funções integradas. Qualquer função não listada aqui é bloqueada e causa um erro de validação quando você cria ou atualiza uma função.
Conversão de tipo (3)
| Função | Description | Exemplo | Resultado |
|---|---|---|---|
$string(value) | Converter em string | $string(200) | "200" |
$number(value) | Converter em número | $number('42') | 42 |
$boolean(value) | Converter em booleano | $boolean(1) | true |
Introspecção (4)
| Função | Description | Exemplo | Resultado |
|---|---|---|---|
$length(string) | Tamanho da segmento | $length('hello') | 5 |
$count(array) | Contagem de elementos da matriz | $count([1, 2, 3]) | 3 |
$exists(value) | Verifique se o valor existe (não indefinido) | $exists(temp.id) | true ou false |
$keys(object) | Obter nomes de chaves de objetos | $keys(response.body) | ["id", "name"] |
Numérico (7)
| Função | Description | Exemplo | Resultado |
|---|---|---|---|
$sum(array) | Soma da 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) | Média aritmética | $average([10, 20, 30]) | 20 |
$abs(number) | Valor absoluto | $abs(-7) | 7 |
$floor(number) | Arredondar para baixo | $floor(3.9) | 3 |
$round(number, precision) | Redondo até a precisão | $round(3.456, 2) | 3.46 |
Corda (7)
| Função | Description | Exemplo | Resultado |
|---|---|---|---|
$uppercase(string) | Para maiúsculas | $uppercase('hello') | "HELLO" |
$lowercase(string) | Para minúsculas | $lowercase('Hello') | "hello" |
$trim(string) | Remover espaço em leading/trailing branco | $trim(' hi ') | "hi" |
$substring(string, start, length) | Extraia a substring (com base em zero) | $substring('abcdef', 2, 3) | "cde" |
$contains(string, pattern) | Verifique se a string contém um padrão | $contains(session.user_agent, 'CTV') | true ou false |
$match(string, pattern) | Combine a string com o padrão regex | $match('abc-123', /[0-9]+/) | {"match": "123", ...} |
$replace(string, pattern, replacement) | Substitua o padrão correspondente | $replace('hello', 'l', 'r') | "herro" |
Matriz (5)
| Função | Description | Exemplo | Resultado |
|---|---|---|---|
$append(arr1, arr2) | Concatenar matrizes | $append([1, 2], [3, 4]) | [1, 2, 3, 4] |
$reverse(array) | Ordem inversa | $reverse([1, 2, 3]) | [3, 2, 1] |
$sort(array) | Matriz de classificação | $sort([3, 1, 2]) | [1, 2, 3] |
$distinct(array) | Remover duplicações | $distinct([1, 2, 2, 3]) | [1, 2, 3] |
$map(array, func) | Aplique a função a cada elemento | $map([1,2,3], function($v){$v*2}) | [2, 4, 6] |
Booleano (1)
| Função | Description | Exemplo | Resultado |
|---|---|---|---|
$not(value) | Lógico NÃO | $not(false) | true |
Aleatório (1)
| Função | Description | Exemplo | Resultado |
|---|---|---|---|
$random() | Número aleatório entre 0 (inclusive) e 1 (exclusivo) | $random() > 0.5 ? 'A' : 'B' | "A" ou "B" |
nota
$random()gera um novo valor em cada avaliação. Se você precisar do mesmo valor aleatório em várias chaves de saída, vincule-o primeiro a uma variável:($r := $random(); ...).
Date/time (4)
| Função | Description | Exemplo | Resultado |
|---|---|---|---|
$now() | Carimbo de data/hora atual como uma string ISO 8601 | $now() | "2024-01-15T12:00:00.000Z" |
$millis() | Carimbo de data/hora atual em milissegundos desde a época | $millis() | 1705320000000 |
$toMillis(string) | Converter string ISO 8601 em milissegundos | $toMillis('2024-01-15T12:00:00.000Z') | 1705320000000 |
$fromMillis(number) | Converter milissegundos em string ISO 8601 | $fromMillis(1705320000000) | "2024-01-15T12:00:00.000Z" |
Codificação (6)
| Função | Description | Exemplo |
|---|---|---|
$encodeUrl(string) | Codificação de URL (preserva caracteres estruturais como/,,?) & | $encodeUrl('https://example.com/path?q=hello world') |
$encodeUrlComponent(string) | O URL codifica um único componente (codifica todos os caracteres especiais) | $encodeUrlComponent('a&b=c') → "a%26b%3Dc" |
$decodeUrl(string) | Decodifique uma string URL-encoded | $decodeUrl('hello%20world') → "hello world" |
$decodeUrlComponent(string) | Decodificar um componente URL-encoded | $decodeUrlComponent('a%26b') → "a&b" |
$base64encode(string) | Codificar para Base64 | $base64encode('hello') → "aGVsbG8=" |
$base64decode(string) | Decodifique a partir de Base64 | $base64decode('aGVsbG8=') → "hello" |
dica
Use $encodeUrlComponent() para valores de parâmetros de consulta individuais. Use $encodeUrl() somente quando precisar codificar um URL completo, preservando sua estrutura.
Padrões comuns
Valores alternativos
Forneça um padrão quando um valor pode não existir.
{%$exists(player_params.region) ? player_params.region : 'us-east-1'%}
Construção dinâmica de URL
Crie uma URL do servidor de decisão de anúncios a partir de várias entradas.
{%'https://ads.example.com/v1/vast?ip=' & $encodeUrlComponent(session.client_ip) & '&ua=' & $encodeUrlComponent(session.user_agent) & '&sid=' & session.id%}
O código de status verifica a saída HTTP_REQUEST
Proteja os valores de saída contra falhas de HTTP.
{%response.statusCode != null and response.statusCode = 200 ? response.body.envelope : 'default-envelope'%}
Conversão numérica dos parâmetros do player
Os parâmetros do player chegam como strings. Converta-os antes das comparações aritméticas ou numéricas.
{%$number(player_params.max_duration) > 30 ? 'long' : 'short'%}
Importante
Se $number() receber uma string não numérica, ela retornará. undefined Combine-o com $exists() quando o parâmetro pode estar ausente ou inválido:($val :=
$number(player_params.max_duration); $exists($val) and $val > 30 ? 'long'
: 'short').
Divisão aleatória de tráfego
Atribua espectadores a grupos de experimentos usando$random().
{%$random() > 0.5 ? 'https://ads.example.com/v1/vast-a' : 'https://ads.example.com/v1/vast-b'%}
Classificação do tipo de dispositivo
Classifique os dispositivos com base na string do agente do usuário.
{%$contains(session.user_agent, 'CTV') ? 'ctv' : $contains(session.user_agent, 'Mobile') ? 'mobile' : 'desktop'%}