Template JSON

<< Clique para Mostrar o Sumário >>

 

Template JSON

JSON (JavaScript Object Notation) é um formato de troca de dados de fácil compreensão para humanos, e também simples para que programas realizem o processamento e extração de informações. O formato JSON é construído sobre duas estruturas, uma coleção de pares contendo nome e valor e uma lista ordenada destes pares.

Um Objeto é uma lista não ordenada de pares de nomes e valores. Um objeto é delimitado por chaves, cada nome é definido dentro de aspas duplas seguido por dois pontos e o respectivo valor, e cada par é separado por vírgulas.

Um Array é uma lista ordenada de valores. Um array é delimitado por colchetes e os valores são separados por vírgulas. Valores podem ser números ou textos, que devem ser representados entre aspas duplas. Exemplo de uma mensagem no formato JSON:

{"s":1, "t":"2014-07-11T15:26:37Z", "q":192,"c":1, "x":-1.234,"y":0.234, "z":-0.234}

 

Para extrair o conteúdo da mensagem anterior, um possível Template seria o seguinte:

{"s":"DUMMY", "t":"TS_TEXT(%y-%m-%dT%H:%M:%SZ)","q":"QL_OPC", "c":"DUMMY", "x":"E3VAL","y":"E3VAL", "z":"E3VAL"}

 

Neste caso, deve ser criado um Tag Bloco com três Elementos de Bloco, e cada Elemento de Bloco recebe um dos valores x, y e z, respectivamente.

O código a seguir contém outro exemplo de mensagem no formato JSON:

{
  "n_channels":2,
  "timestamp":1504198675,
  "hash":"1842E0F97392F08BDF996961A8333832AB06D113",
  "battery":5.13,
  "gmt":-3,
  "tag_channels":["Analog1","Analog2"],
  "value_channels":[28.100,27.200],
  "tag_units":["°C","°C"],
  "alarm_low":[0,0],
  "alarm_high":[0,0],
  "buzzer_state":0
}

 

Um possível Template para o exemplo anterior seria o seguinte:

{
  "n_channels":"DUMMY",
  "timestamp":"TS_UNIX",
  "hash":"DUMMY",
  "battery":"V1",
  "gmt":"V2",
  "tag_channels":["V3","V4"],
  "value_channels":["V5","V6"],
  "tag_units":["V7","V8"],
  "alarm_low":["V9","V10"],
  "alarm_high":["V11","V12"],
  "buzzer_state":"V13"
}

 

Observação: Tanto a mensagem como os templates devem ser objetos ou arrays, portanto devem começar com um { ou [.

 

Repetição de Valores

 

Os arrays podem ser usados para receber um número variável de elementos. Vamos tomar como exemplo as mensagens abaixo:

 

Mensagem 1:

{

  "MessageType": "Teste",

  "TagData": [

    {

      "Temperature": 11,

      "Humidity": 50

    },

   {

      "Temperature": 14,

      "Humidity": 80

    }

  ]

}

 

Mensagem 2:

{

  "MessageType": "Teste",

  "TagData": [

    {

      "Temperature": 11,

      "Humidity": 12

    },

   {

      "Temperature": 14,

      "Humidity": 66

    }

   {

      "Temperature": 70,

      "Humidity": 55

    }

  ]

}

 

Vejam que dentro do array, é possível que tenhamos 1, 2, 3 ou N conjuntos de temperatura e umidade em uma única mensagem, e seria interessante se um tag bloco "Teste" com dois elementos (Temperature e Humidity) pudesse receber uma leitura a cada conjunto.

 

Para isto, devemos declarar o template com uma keyword Repeat_E3VAL imediatamente após o colchete que marca o ínicio do array. Exemplo:

 

{"MessageType":"DUMMY","TagData":[Repeat_E3VAL{"Temperature":"E3VAL","Humidity":"E3VAL"}]}

 

Desta forma, ao recebermos a mensagem 2, por exemplo, teremos uma chamada do evento OnRead do bloco para cada conjunto. Exemplo:

 

Sub [Sensor-001_OnRead]()

Application.Trace Item("Temperatura").Value

Application.Trace Item("Umidade").Value

End Sub

 

Log:

910         2021-08-05 10:06:15.826              0x3FF8  0x3210  APPTRACE          11           14

911         2021-08-05 10:06:15.826              0x3FF8  0x3210  APPTRACE          12           14

912         2021-08-05 10:06:15.826              0x3FF8  0x3210  APPTRACE          14           14

913         2021-08-05 10:06:15.826              0x3FF8  0x3210  APPTRACE          66           14

914         2021-08-05 10:06:15.826              0x3FF8  0x3210  APPTRACE          70           14

915         2021-08-05 10:06:15.826              0x3FF8  0x3210  APPTRACE          55           14

 

Caso tivessem sido declarados mais valores E3VAL antes da posição de repetição, esses valores seriam repetidos para cada conjunto.  Como exemplo, se tivéssemos declarado o template como

 

{"MessageType":"E3VAL","TagData":[Repeat_E3VAL{"Temperature":"E3VAL","Humidity":"E3VAL"}]}

 

poderíamos ter o bloco com 3 elementos (Type, Temperatura e Umidade), sendo que receberiamos os seguintes valores a cada evento OnRead:

"Teste";11;12 '=> primeiro OnRead

"Teste";14;66 ' => segundo OnRead

"Teste";70;55 '=> terceiro OnRead

 

Esta página foi útil?