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:\Windows\system32.
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_asp_JSON.txt
JSON_VBScriptDriver.zip

Print Friendly, PDF & Email

Este artigo foi útil? Was this helpful?

Classificação média - Average rating 5 / 5. Count: 3

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

  1. Bom dia.
    Preciso acessar uma estrutura mais complexa de dados json. Onde consigo a documentação para conseguir desenvolver minha aplicação?

  2. 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).

    1. Bom dia Eurípedes,
      Em determinadas situações, o componente Microsoft® XML Core Services (MSXML) pode ser incompatível com o WebService utilizado.
      Portanto, ao criar o objeto substitua o CreateObject(“Msxml2.ServerXMLHTTP“) por CreateObject(“Msxml2.XMLHTTP“).

  3. Obrigado pela atenção.
    Segue um pedaço da chamada que estou fazendo ao serviço Rest, porém o readyState não sai do 1, veja se consegue me ajudar, creio que esteja esquecendo algo ou fazendo errado msm:
    Set HttpReq = Server.CreateObject(“MSXML2.XMLHTTP.6.0”)
    HttpReq.Open “POST”, Session(“url_acompanhamento_servico”), false
    HttpReq.SetRequestHeader “Authorization”, Session(“Authorization”)
    HttpReq.SetRequestHeader “Content-Type”, “application/json;charset=UTF-8”
    HttpReq.SetRequestHeader “Accept”, “application/json”
    HttpReq.send strJSON

  4. Olá amigo,
    parabens pelo artigo.
    Estou precisando utilizar o oJsonParser.LoadJSON(URL) , só que no lugar da URL, preciso colocar um arquivo, tipo “teste.json”.
    Você conseguiria dar um exemplo?

    Desde já, Obrigado!

  5. Estou obtendo um erro na linha 89 na class aspJSON.
    Linha: Set level(aj_currentlevel + 1) = level(aj_currentlevel).Item(aj_currentkey)
    Erro: Subscrito fora do intervalor: ‘[number: 100]’

  6. Boa tarde!
    Preciso fazer leitura de uma variável em um servidor web, mas o mesmo não é liberado como o exemplo do CEP, precisa configurar o HEADER acrescentando o campo Authorization.

  7. Boa tarde!
    Preciso fazer leitura de uma variável em um servidor web, mas o mesmo não é liberado como o exemplo do CEP, precisa configurar o HEADER acrescentando o campo Authorization.
    Alguém sabe como implementar?

    Desde já agradeço!

  8. Preciso enviar dados que estão requeridos da seguinte forma:

    {
    “idLote”: 0,
    “idLocalOrigem”: 0,
    “idLocalDestino”: 0,
    “peso”: 0
    }

    Essa estrutura está no JSON.

    Estou utilizando no E3 o seguinte Script:

    Dim objXmlHttpMain , URL

    strJSONToSend = “{“”idLote””: ” &Screen.Item(“idLote”).Value &”, “”idLocalOrigem””: ” &Screen.Item(“idOrigem”).Value &”,””idLocalDestino””: “&Screen.Item(“idDestino”).Value&”,””peso””: “&Screen.Item(“Peso”).Value&”}”

    Porém, não consigo adicionar o peso, testando diretamente no ambiente de homologação funciona. Mas pelo E3 não vai. Alguém poderia me ajudar?

Deixe seu Comentário

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