Consumindo e enviando dados de um webservice que utiliza o formato JSON.

1. Introdução

O JSON (JavaScript Object Notation) é um modelo leve para armazenamento e transmissão de informações no formato texto. Embora simples, este modelo tem sido bastante utilizado por aplicações web devido a sua capacidade de estruturar informações de uma forma mais compacta em comparação com o modelo XML.

Em JSON, os dados são apresentados da seguinte forma:

Um objeto é um conjunto desordenado de pares nome/valor; ele começa com { (chave de abertura) e termina com } (chave de fechamento). Cada nome é seguido por : (dois pontos), e os pares nome/valor são seguidos por , (vírgula).

Um array é uma coleção de valores ordenados; ele começa com [ (colchete de abertura) e termina com ] (colchete de fechamento). Os valores são separados por , (vírgula).

Exemplo de uma estrutura JSON:

[
    {
        "id": 1,
        "username": "ElipseRS",
        "password": "Eli123"
    },
    {
        "id": 2,
        "username": "ElipseSP",
        "password": "EliSP123"
    },
    {
        "id": 3,
        "username": "ElipseMG",
        "password": "ElipMG123"
    }
]

Neste artigo, veremos como consumir e enviar dados através do Elipse E3 a um webservice desenvolvido em formato JSON.

2. Webservice JSON

Um webservice no formato JSON foi desenvolvido para a simulação de valores. Quanto à confirmação dos dados da solicitação HTTP: no POST, foram retornados os valores enviados e uma mensagem de sucesso no envio (no formato JSON); no GET, foram retornados valores conforme padrão estabelecido pelo protocolo.

Formato do webservice utilizado:

[
{
"id":1,
"email":"scherer@elipse.com.br",
"username":"scherer",
"password":"password"
},
{
"id":2,
"email":"delio@elipse.com.br",
"username":"delio",
"password":"password123"
},
{
"id":3,
"email":"enrico@elipse.com.br",
"username":"enrico",
"password":"password321"
}
]

3. Integrando o Elipse E3 com o Webservice JSON

Assim como o XML, o VBScript não suporta o tratamento do JSON de modo nativo. Uma alternativa é utilizar uma classe em VBScript que faça a análise sintática (parsing) de uma string em JSON (iniciada com “{” ou com “[“), ou que opcionalmente faça uma chamada HTTP utilizando o componente “msxml2.ServerXMLHTTP” e avalie a string JSON retornada por esta chamada.

NOTA: A string utilizada para a criação do componente Microsoft® XML Core Services (MSXML) pode variar de acordo com a versão disponível no sistema. É possível verificar quais DLLs “msxml” estão presentes no computador na pasta C:Windowssystem32.
Em determinadas situações, o componente Microsoft® XML Core Services (MSXML) pode ser incompatível com o WebService utilizado. Nestes casos, ao criar o objeto substitua o CreateObject(“Msxml2.ServerXMLHTTP) por CreateObject(“Msxml2.XMLHTTP).

4. Consumindo dados do webservice (GET)

O script abaixo foi utilizado para realizar a leitura dos dados do webservice:

Sub CommandButton1_Click()
Dim oJsonParser
Set oJsonParser = new aspJSON   'Criação do objeto tipo aspJSON

'Inserir endereço do Webservice
URL = "http://www.filltext.com/?rows=3&id={index}&email={email}&username={username}&password={randomString|5}&pretty=true"
oJsonParser.LoadJSON(URL) 'Carregando objeto JSON
For i = 0 to oJsonParser.data.count - 1
   Screen.Item("ID"&i&"").Value = oJsonParser.data(i).item("id")
   Screen.Item("Email"&i&"").Value = oJsonParser.data(i).item("email")
   Screen.Item("User"&i&"").Value = oJsonParser.data(i).item("username")  
   Screen.Item("Password"&i&"").Value = oJsonParser.data(i).item("password")
Next 
End Sub

NOTA: A classe aspJSON referenciada acima não foi exibida, mas ela é responsável por realizar o parsing em uma string JSON. Na aplicação exemplo em anexo, esta classe estará disponível.

5. Escrevendo no Webservice (POST)

Para realizar a escrita no webservice, foi utilizado o objeto ServerXMLHTTP, que fornece métodos e propriedades que permitem estabelecer uma conexão HTTP entre arquivos ou objetos em diferentes servidores web. O script abaixo foi utilizado para realizar a escrita dos dados no webservice:

Sub CommandButton2_Click()
Dim objXmlHttpMain , URL
strJSONToSend = "{""id"": ""0"", ""email"": ""elipse@elipse.com.br"", ""username"": ""Elipse"", ""password"": ""Elipse123""}"
URL="http://scherer:5000/users/" 'Endereço do webservice  
Set objXmlHttpMain = CreateObject("Msxml2.ServerXMLHTTP")
On Error Resume Next 
objXmlHttpMain.open "POST",URL, False 
If Err Then            'handle errors
   Msgbox Err.Description & " [0x" & Hex(Err.Number) & "]"
End If
On Error Goto 0 
objXmlHttpMain.setRequestHeader "Content-Type", "application/json"
objXmlHttpMain.send strJSONToSend
strResponse = objXmlHttpMain.responseText
msgbox strResponse
End Sub

6. Aplicação exemplo

O exemplo em anexo foi desenvolvido na versão 4.7 build 252 do Elipse E3 e projetado para ser compatível com a estrutura do webservice ilustrado no item 2. Para atender a outros formatos, será preciso adaptá-lo, e consequentemente, o endereço da URL do webservice deve ser alterado no script.
Em anexo, também há um exemplo que realiza a leitura de um Webservice JSON via Driver Elipse VBScript.


Assista o vídeo relacionado a este artigo também em nosso canal do YouTube.

Anexos:

JSON.zip
Class_aspJSON.txt
JSON_VBScriptDriver.zip

Este artigo foi útil? Was this post helpful?
Yes7
No0

Comentários em “Consumindo e enviando dados de um webservice que utiliza o formato JSON.

  1. Bom dia Vitor,
    Se você possui uma estrutura JSON de arrays com tamanhos variáveis, e não apenas objetos de pares nome/valor, você precisará percorrer os arrays inserindo novos laços (for) dentro do script.

    Exemplo de estrutura JSON:
    {
    "status": "ok",
    "message": "Devices list successfully fetched",
    "devices": [
    {
    "id": 3,
    "addr": "RS1-003",
    "name": "New_XR75CX",
    "model": "002C-0063-0058-XR75CX",
    "enabled": true,
    "protocol": "dixelldev",
    "serial": "1,9600,n,8,1,30,5,2"
    },
    {
    "id": 4,
    "addr": "RS1-004",
    "name": "New_XR75CX",
    "model": "002C-0063-0058-XR75CX",
    "enabled": true,
    "protocol": "dixelldev",
    "serial": "1,9600,n,8,1,30,5,2"
    }
    ]
    }

    Parte do script utilizado para receber os dados:

    DIM oJsonParser
    Set oJsonParser = new aspJSON 'Criação do objeto tipo aspJSON

    'Inserir endereço do Webservice
    URL = "http://localhost:8080/Json"

    oJsonParser.LoadJSON(URL) 'Carregando objeto JSON

    for i = 0 to oJsonParser.data.count - 1
    Screen.Item("status").Value = oJsonParser.data(i).item("status")
    Screen.Item("message").Value = oJsonParser.data(i).item("message")

    for b = 0 to oJsonParser.data(i).item("devices").count -1
    Screen.Item("id"&b&"").Value = oJsonParser.data(i).item("devices").item(b).item("id")
    Screen.Item("addr"&b&"").Value = oJsonParser.data(i).item("devices").item(b).item("addr")
    Screen.Item("name"&b&"").Value = oJsonParser.data(i).item("devices").item(b).item("name")
    Screen.Item("model"&b&"").Value = oJsonParser.data(i).item("devices").item(b).item("model")
    Screen.Item("enabled"&b&"").Value = oJsonParser.data(i).item("devices").item(b).item("enabled")
    Screen.Item("protocol"&b&"").Value = oJsonParser.data(i).item("devices").item(b).item("protocol")
    Screen.Item("serial"&b&"").Value = oJsonParser.data(i).item("devices").item(b).item("serial")

    Next
    Next
    End Sub

    Se encontrar dificuldade, envie a sua estrutura JSON para eu verificar (delio@elipse.com.br).

Deixe seu Comentário

Seu endereço de e-mail não será publicado. Campos marcados com asterisco são obrigatórios *