1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Urgente Tratar retorno Json

Discussão em 'Progress 4GL' iniciado por fnmattos, Março 31, 2017.

  1. fnmattos

    fnmattos Sem Pontuação

    Bom dia,

    estou recebendo o seguinte retorno de serviço web:
    {"message":"Token j\u00e1 existe.","code":200,"access_token":"cf6fa08572f914a5c56f4806124ad4f83c5dbb3c590fba3b284fec0d9346b184","refresh_token":"f48705721f928cc2d3c3d2686dd466f0a361ed550645b353d605463571686dc9","date_expiration_access_token":"2017-03-31 13:40:49","date_expiration_refresh_token":"2017-04-30 10:40:49","date_activated":"2017-03-31 10:40:49",,"store_id":"551663"}

    Como posso tratar isso adequadamente? Eu estou fazendo quebras com entry, substring, index ... mas creio haver uma maneira mais eficiente de fazer isso. Gostaria por exemplo de pegar o valor do parâmetro do acess_token somente. Alguma sugestão?
  2. Agnaldo

    Agnaldo Membro Ativo

    Se estiver usando Progress 10.2B em diante, de uma olhada no método em READ-JSON do dataset.
    Com dele voce pode ler um json diretaenta para dentro de um dataset/temp-table.
  3. Agnaldo

    Agnaldo Membro Ativo

    Ops.
    Acertando o português um pouco...

    Se estiver usando Progress 10.2B em diante, de uma olhada no método READ-JSON do dataset.
    Com dele você pode ler um json diretamente para dentro de um dataset/temp-table.
  4. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Se a posição da chave não mudar, então usa esse código:
    Código:
    DEF VAR StringJSON AS CHAR FORMAT "x(300)".
    DEF VAR AccessToken AS CHAR.
    DEF VAR ValorAccessToken AS CHAR.
    
    UPDATE StringJSON WITH 1 COL FONT 3 SCROLLABLE. /* Ao rodar o programa você coloca sua string dentro dessa variável para simular */
    
    StringJSON = REPLACE(StringJSON,"""","").
    
    AccessToken = ENTRY(3,StringJSON,",").
    ValorAccessToken = ENTRY(2,AccessToken,":").
    
    MESSAGE ValorAccessToken
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    Se a posição da chave muda, usa esse outro código:
    Código:
    DEF VAR StringJSON AS CHAR FORMAT "x(300)".
    DEF VAR AccessToken AS CHAR.
    DEF VAR ValorAccessToken AS CHAR.
    DEF VAR Valores AS CHAR EXTENT.
    DEF VAR xi AS INTEGER.
    
    UPDATE StringJSON WITH 1 COL FONT 3 SCROLLABLE. /* Ao rodar o programa você coloca sua string dentro dessa variável para simular */
    DISP "".
    
    StringJSON = REPLACE(StringJSON,"""","").
    StringJSON = REPLACE(StringJSON,CHR(123),"").
    StringJSON = REPLACE(StringJSON,CHR(125),"").
    
    RUN Split(INPUT StringJSON,
              INPUT ",",
              OUTPUT Valores).
    
    DO xi = 1 TO EXTENT(Valores).
       IF ENTRY(1,Valores[xi],":") = "access_token" THEN DO:
          MESSAGE ENTRY(1,Valores[xi],":") SKIP
                  ENTRY(2,Valores[xi],":")
                  VIEW-AS ALERT-BOX INFO BUTTONS OK.
          LEAVE.
       END.
    END.
    
    
    /* ##### SPLIT DE STRINGS #################################################################################### */
    PROCEDURE Split.
      DEF INPUT PARAMETER vTextoEntrada AS CHAR.
      DEF INPUT PARAMETER vSeparador AS CHAR.
      DEF OUTPUT PARAMETER vValores AS CHAR EXTENT.
      DEF VAR idx AS INTEGER.
      DEF VAR PosAtual AS INTEGER.
      DEF VAR ValInicial AS INTEGER.
      DEF VAR QtdeCar AS INTEGER.
    
      PosAtual = 1.
      DO WHILE TRUE.
         PosAtual = INDEX(vTextoEntrada,vSeparador,PosAtual).
         IF PosAtual = 0 THEN LEAVE.
         idx = idx + 1.
         PosAtual = PosAtual + 1.
      END.
    
      EXTENT(vValores) = idx + 1.
    
      PosAtual = 1.
      DO idx = 1 TO EXTENT(vValores).
         IF LENGTH(vSeparador) > 1 THEN ValInicial = (IF PosAtual > 1 THEN PosAtual + (LENGTH(vSeparador) - 1) ELSE PosAtual).
         ELSE ValInicial = PosAtual.
         QtdeCar = INDEX(vTextoEntrada,vSeparador,PosAtual) - ValInicial.
         QtdeCar = (IF QtdeCar < 0 THEN -1 ELSE QtdeCar).
         ASSIGN vValores[idx] = SUBSTRING(vTextoEntrada,ValInicial,QtdeCar).
         PosAtual = INDEX(vTextoEntrada,vSeparador,PosAtual).
         PosAtual = PosAtual + 1.
      END.
    END PROCEDURE.
    /* ########################################################################################################################## */
    
  5. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Quando eu disse "se a chave não mudar", me referi a mudar de posição na string, rsrsrs
  6. fnmattos

    fnmattos Sem Pontuação

    Consegui evoluir, mas quando existem arrays dentro de um conjunto, estou com o erro. Dentro do conjunto 'Customer', eu tenho um subconjunto 'CustomerAddress', em que inclusive, se repetem o nome dos campos (ID).Se puderem me ajudar, segue exemplo do conjunto em questão:

    {"Customer":{"id":"123","name":"Nome do Cliente","rg":"00.000.000-0","cpf":"00000000000","phone":"1133330000","cellphone":"11999990000","birth_date":"0000-00-00","gender":"0","email":"emaildo@cliente.com.br","nickname":"","token":"123QWE123QWE123ASD","total_orders":"8","observation":"","type":"1","cnpj":"00.000.000/0000-00","company_name":"Razão Social do Cliente","state_inscription":"Isento","reseller":"0","discount":"0.00","blocked":"0","credit_limit":"10.00","indicator_id":"0","profile_customer_id":"1","last_sending_newsletter":"2016-08-02","last_purchase":"2016-08-02","last_visit":"2016-08-15","last_modification":"0000-00-00 00:00:00","address":"Endereço do Cliente","zip_code":"04001-001","number":"123","complement":"Sala 123","neighborhood":"Bairro do Cliente","city":"Cidade do Cliente","state":"SP","newsletter":"1","created":"2008-10-14 18:17:23","registration_date":"2008-10-14","modified":"2016-08-15 18:17:23","CustomerAddress":[{"id":"1"},{"id":"2"}]}}
    Customers - Cadastrar Cliente
    1.0.0



    Requisição para inclusão de um cliente. Deverá enviar o JSON com os dados do cliente para a criação.



    https://{api_address}/custome

Compartilhe esta Página