Tags de Caminho JSON

<< Clique para Mostrar o Sumário >>

 

Tags de Caminho JSON

Somente Leitura

Utilize um Tag de Comunicação ou um Tag Bloco para ler um valor diretamente pelo caminho no formato JSON da resposta de uma requisição, sem declarar um template. Este caminho é informado no parâmetro Item com o prefixo $ (cifrão), conforme a tabela a seguir.

 

Item

<Route Alias>;$<Caminho>[@<Caminho da estampa de tempo>[:<Formato>]]

N1 ou B1

Não utilizado, deixe em 0 (zero)

N2 ou B2

Não utilizado, deixe em 0 (zero)

N3 ou B3

Não utilizado, deixe em 0 (zero)

N4 ou B4

Não utilizado, deixe em 0 (zero)

 

Os Tags de Caminho JSON convivem com os Tags que usam template na mesma rota e na mesma requisição. São indicados para leituras pontuais em respostas grandes e para respostas com chaves dinâmicas, como por exemplo datas ou identificadores que não podem ser mapeados por um template. Não deve haver espaços ao redor do caractere ; (ponto e vírgula) no parâmetro Item.

Uma requisição continua sendo disparada por uma escrita no Tag PLC configurado com o parâmetro N1 igual a 1 (um). Ao receber uma resposta, este Driver navega até o caminho informado e entrega o valor a este Tag. Utilize um Tag de Comunicação para um valor único e um Tag Bloco para listas e objetos.

Elementos de um caminho

Elemento

Sintaxe

Exemplo

Descrição

Chave de objeto

chave

total_30d

Acessa a chave de um objeto

Chaves aninhadas

a.b.c

dados.config.max

Navega em objetos dentro de objetos

Índice de array

[n] ou [-n]

dados[0], dados[-1]

n-ésimo elemento de um array. Um índice negativo conta a partir do fim de um array

Índice posicional em objeto

[n] ou [-n]

chuva_diaria[-1]

n-ésima chave de um objeto, na ordem de um documento

Wildcard

[*]

dados[*].nivel

Todos os elementos de um array. Este Tag recebe uma lista com o restante do caminho aplicado a cada elemento

Macro de data

{TODAY}, {TODAY-n} ou {TODAY+n}

chuva_diaria.{TODAY-1}

Data local atual, menos ou mais n dias, usada como chave. O formato padrão é %Y-%m-%d. Esta macro é expandida a cada requisição

Macro de data com formato

{TODAY-n:formato}

{TODAY-1:%d/%m/%Y}

Formato da data com as mesmas opções da palavra-chave TS_TEXT

Chave com aspas

'chave' ou "chave"

'config.v2'

Endereça chaves que contêm ponto, colchetes ou chaves

Estampa de tempo de um dado

@caminho[:formato]

nivel@datetime

Carimba um valor com a estampa de tempo lida do próprio formato JSON, conforme descrito a seguir

 

Estampa de Tempo do Dado

O caminho após o caractere @ (arroba) é resolvido a partir da raiz de uma resposta e aceita a mesma sintaxe do caminho de um valor, exceto o caractere de * (asterisco ou wildcard). Quando o caminho de um valor aponta para um array de objetos, ou modo de repetição, o caminho da estampa de tempo é resolvido em relação a cada elemento, carimbando cada leitura com o tempo da própria amostra.

Se o valor apontado é um número, este é interpretado como uma estampa de tempo no formato UNIX, em segundos. Se este valor é um texto, este é convertido com o formato informado após o caractere de dois pontos, cujo padrão é %Y-%m-%dT%H:%M:%S, com as mesmas opções da palavra-chave TS_TEXT, incluindo o padrão %f para milissegundos e %+ para o fuso horário.

Uma falha em uma estampa de tempo não impede a entrega de um valor. Este erro é registrado no arquivo de log deste Driver e o valor é entregue com a estampa de tempo padrão, que é a hora da leitura.

Conversão de um valor para um Tag

Valor no Formato JSON

Resultado em um Tag

Número ou texto

Valor de um Tag. Textos que representam números seguem a regra descrita na seção Conversão de Valores Recebidos como Texto

Objeto

Tag Bloco com os valores das chaves, na ordem de um documento. Objetos aninhados são convertidos em sub-listas

Array de números ou textos

Tag Bloco com a lista de valores

Array de objetos

Uma leitura por elemento, cada leitura com os valores das chaves de um objeto, de forma equivalente à palavra-chave Repeat_E3VAL

null

Valor vazio com qualidade ruim

 

Exemplos

Os exemplos a seguir usam a rota demanda, cuja resposta, em resumo, é a seguinte.

{
  "chuva_diaria": {
    "2026-06-12": 0.4,
    ...
    "2026-07-22": 15.4
  },
  "dados": [
    {
      "chuva_15min": 70.0,
      "nivel": 2.64,
      "datetime_brt": "2026-07-12T14:30:00-03:00"
    },
    ...
    {
      "chuva_15min": 0.0,
      "nivel": 2.57,
      "datetime_brt": "2026-07-22T13:15:00-03:00"
    }
  ],
  "estacao": "BE70C78A",
  "total_30d": 9359.4
}

 

Exemplos de Itens e resultados

Item

Resultado

demanda;$total_30d

9359.4

demanda;$estacao

BE70C78A

demanda;$dados[-1].nivel

2.57 (nível da última amostra)

demanda;$dados[0].nivel

2.64 (nível da primeira amostra)

demanda;$chuva_diaria.{TODAY}

15.4 (chave 2026-07-22, considerando a data atual como 22/07/2026)

demanda;$chuva_diaria[-1]

15.4 (valor da última chave de um objeto)

demanda;$dados[-1].nivel@dados[-1].datetime_brt:%Y-%m-%dT%H:%M:%S%+

2.57 com estampa de tempo 22/07/2026 13:15:00, lida da própria amostra

demanda;$dados[*].nivel

Tag Bloco com a lista de todos os níveis

demanda;$chuva_diaria

Tag Bloco com os valores diários, na ordem deste documento

demanda;$dados[0]

Tag Bloco com os campos do primeiro registro, na ordem deste documento

demanda;$dados

Uma leitura por registro, cada leitura com os campos de um objeto, como na palavra-chave Repeat_E3VAL

demanda;$dados@datetime_brt:%Y-%m-%dT%H:%M:%S%+

Mesmo do item anterior, com cada leitura carimbada com a estampa de tempo da própria amostra

demanda;$

A resposta inteira como um Tag Bloco aninhado, ou seja, chuva_diaria, dados, estacao e total_30d

 

NOTA

Os Tags de Caminho JSON são somente de leitura. A escrita nestes Tags é rejeitada e o envio de dados continua exigindo um template. Um caminho que não existe em uma resposta é registrado no arquivo de log e não impede a atualização dos demais Tags de uma mesma requisição. Com o caractere de * (asterisco ou wildcard), os elementos em que o restante do caminho não existe são ignorados. Um parâmetro Item mal formado é rejeitado na criação deste Tag. A macro de data usa o relógio local do computador onde este Driver é executado.

Esta página foi útil?