Jump to content
Rengavitp

ler json com java

Recommended Posts

Boa tarde pessoal, sou novo ainda em java e estou com a seguinte dificuldade, preciso imprimir um pedido de venda que vem de um sistema no formato json, ja tentei de diversas formas mas nenhuma deu certo, alguem pode me ajudar? Vou colocar abaixo o arquivo json e o metodo mais recente que testei, porem ele só mostra null, sei que o problema deve estar na forma de percorrer o json, mas nao faço ideia de como fazer.

 

{  
   "retorno":{  
      "pedidos":[  
         {  
            "pedido":{  
               "desconto":"15,00",
               "observacoes":"Testando o campo observações do pedido",
               "observacaointerna":"Testando o campo observações internas do pedido",
               "data":"2017-07-28",
               "numero":"1",
               "numeroPedidoLoja":"100000001",
               "vendedor":"João da Silva",
               "valorfrete":"22.50",
               "totalprodutos":"139.98",
               "totalvenda":"147.48",
               "situacao":"Em Aberto",
               "loja": "123456789",
               "dataPrevista":"2017-07-28",
               "tipoIntegracao":"Magento",
               "cliente":{  
                  "nome":"Organisys Software",
                  "cnpj":"00.000.000/0000-1",
                  "ie":"0000000000",
                  "rg":"162788484",
                  "endereco":"Rua Visconde de São Gabriel",
                  "numero":"000",
                  "complemento":"Sala 000",
                  "cidade":"Bento Gonçalves",
                  "bairro":"Cidade Alta",
                  "cep":"95.700-000",
                  "uf":"RS",
                  "email":"teste@organisys.com.br",
                  "celular":"",
                  "fone":"(54) 2222-22222"
               },
               "itens":[  
                  {  
                     "item":{  
                        "codigo":1234,
                        "descricao":"Mochila",
                        "quantidade":"2.0000",
                        "valorunidade":"69.990000000",
                        "precocusto":null,
                        "descontoItem":"0.00",
                        "un":"Pç",
                        "pesoBruto": "0.520",
                        "largura": "20",
                        "altura": "18",
                        "profundidade": "15",
                        "unidadeMedida": "cm",
                        "descricaoDetalhada": "Ecobag esportiva"
                     }
                  }
               ],
               "parcelas":[  
                  {  
                     "parcela":{  
                        "valor":"73.74",
                        "dataVencimento":"2017-07-28 00:00:00",
                        "obs":"Teste obs 1",
                        "forma_pagamento":{  
                           "id":"1",
                           "descricao":"Dinheiro",
                           "codigoFiscal":"1"
                        }
                     }
                  },
                  {  
                     "parcela":{  
                        "valor":"73.74",
                        "dataVencimento":"2017-08-28 00:00:00",
                        "obs":"Teste obs 2",
                        "forma_pagamento":{  
                           "id":"1",
                           "descricao":"Dinheiro",
                           "codigoFiscal":"1"
                        }
                     }
                  }
               ],
               "nota":{  
                  "serie":"1",
                  "numero":"012346",
                  "dataEmissao":"2017-08-28 00:00:00",
                  "situacao":"1",
                  "chaveAcesso":"43140401056417000139550010000123461496923524",
                  "valorNota": "147.48"
               },
               "transporte":{  
                  "transportadora":"Transportadora",
                  "cnpj":"00.000.000/0000-1",
                  "tipo_frete":"R",
                  "volumes":[  
                     {  
                        "volume":{  
                           "idServico":"1231293",
                           "servico":"SEDEX 10",
                           "codigoRastreamento":"SX052413651BR",
                           "dataSaida":"2017-07-28",
                           "prazoEntregaPrevisto":"1",
                           "valorFretePrevisto":"11.25",
                           "valorDeclarado": "0.00",
                           "remessa":{  
                              "numero":"12345AAA",
                              "dataCriacao":"2017-10-17"
                           },
                           "dimensoes":{  
                              "peso":"1.553",
                              "altura":"20",
                              "largura":"15",
                              "comprimento":"20",
                              "diametro":"0"
                           }
                        }
                     },
                     {  
                        "volume":{  
                           "idServico":"1231293",
                           "servico":"SEDEX 10",
                           "codigoRastreamento":"SX052413651BR",
                           "dataSaida":"2017-07-28",
                           "prazoEntregaPrevisto":"1",
                           "valorFretePrevisto":"11.25",
                           "remessa":null,
                           "dimensoes":{  
                              "peso":"1.553",
                              "altura":"20",
                              "largura":"15",
                              "comprimento":"20",
                              "diametro":"0"
                           }
                        }
                     }
                  ],
                  "enderecoEntrega":{  
                     "nome":"Organisys Software Entrega",
                     "endereco":"Rua Assis Brasil",
                     "numero":"222",
                     "complemento":"",
                     "cidade":"Bento Gonçalves",
                     "bairro":"Centro",
                     "cep":"95.700-000",
                     "uf":"RS"
                  }
               }
            }
         }
      ]
   }
}
package javaapplication2;
 
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
 
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
 
public class JSONRead {
 
    public static void main(String[] args) {
        JSONObject jsonObject;
        //Cria o parse de tratamento
        JSONParser parser = new JSONParser();
        //Variaveis que irao armazenar os dados do arquivo JSON
        String nome;
        String sobrenome;
        String estado;
        String pais;
 
        try {
            //Salva no objeto JSONObject o que o parse tratou do arquivo
            jsonObject = (JSONObject) parser.parse(new FileReader(
                    "//users/vagnermocelin/teste.json"));
             
            //Salva nas variaveis os dados retirados do arquivo
            numero = (String) jsonObject.get("numero");
            vendedor = (String) jsonObject.get("vendedor");
            total_produtos = (String) jsonObject.get("total_produtos");
            total_venda = (String) jsonObject.get("total_venda");
 
            System.out.printf(
                    "Numero: %s\nVendedor: %s\nProdutos: %s\nVenda: %s\n",
                    numero, vendedor, total_produtos, total_venda);
        } 
        //Trata as exceptions que podem ser lançadas no decorrer do processo
        catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
 
}

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By kania
      Tenho a seguinte situação.
      Recebo vários JSONs podendo ou não ser multidimensional, preciso atualizar uma determinada chave deste JSON, o problema é que algumas chaves podem ser duplicadas, bem como seus respectivos valores. Como estou tentando criar uma função genérica para navegar em qualquer JSON e modificar a chave em si, com estas duplicidades de chaves, estou tendo dificuldades em dizer ao código qual é chave que devo alterar.
       
      Arquivo JSON Exemplo
       
      {       "CREDITOR": {         "TAX": {           "TAC": 0.7         },         "ENABLE": "true",         "PRODUCTION": {           "email": "email@dominio.com",           "senha": "12457895",           "BASE_URL": "https://domino.com"         },         "HOMOLOGATION": {           "email": "email@dominio.com",           "senha": "12457895",           "BASE_URL": "https://domino.com"         },         "TARGET_VALUES": 5000000       }     }  
      Converto o JSON para array
       
      $json = json_decode($json_string, true);
      Função que criei até aqui
       
         
      /**      * Encontra a chave correspondente dentro do JSON      *      * @param array $jsonArray - JSON a ser verificado      * @param string $keyFather - chave de entrada      * @param string $keyUpdate - chave que modificar      * @param string $valueUpdate - novo valor da chave      * @return string      *      */     public static function searchKeyJson(array $jsonArray, string $keyFather, string $keyUpdate = null, $valueUpdate = null)     {         foreach ($jsonArray as $key => $value) {             if ($key == $keyFather && $keyUpdate == null) {                 $jsonArray[$key] =  $valueUpdate;                 return $jsonArray;             }             if ($key == $keyFather && $keyUpdate != null) {                 $jsonArray[$keyFather][$keyUpdate] = $valueUpdate;                 return $jsonArray;             }             if (is_array($value)) {                 if (($result = self::searchKeyJson($value, $keyFather, $keyUpdate, $valueUpdate)) !== false) {                     if ($keyUpdate == null) {                         return $result;                     } else {                         return $result;                     }                 }             }         }         return false;     }
      Até modifico o valor, mais no final para salvar, ele não monta o JSON como original, ele caba ignorando a chave inicial no JSON de exmeplo "CREDITOR": {}
       
      Retorno da função (notem que esta forma do padrão da original)
       
      => [          "TAX" => [            "TAC" => 0.7,          ],          "ENABLE" => "true",          "PRODUCTION" => [            "email" => "teste",            "senha" => "12457895",            "BASE_URL" => "https://domino.com",          ],          "HOMOLOGATION" => [            "email" => "email@dominio.com",            "senha" => "12457895",            "BASE_URL" => "https://domino.com",          ],          "TARGET_VALUES" => 5000000,        ]  
      Se eu percorrer o array e tentar modificar a chave em questão, ele muda todas as as chaves que tiverem no JSON porque tem duplicidade.
      Como posso resolver isto com uma função global que sirva para qualquer padrão de JSON que eu tiver?
    • By Jack Oliveira
      Ola pessoal estou com uma dificuldade ou melhor com erro ao fazer a leitura do arquivo por ajax
      Pelo meus calculos esta certo a forma que fiz, porem nao me mostra o resultado
      Espero que possam dar uma ideia do que seria e de como resolver
       
      este é o erro que retorna
      <br /> <b>Notice</b>: Undefined index: length in <b>C:\Host\htdocs\CMS-DELIVERY\CPANELUSER\ajax-list.php</b> on line <b>31</b><br /> <br /> <b>Notice</b>: Undefined index: start in <b>C:\Host\htdocs\CMS-DELIVERY\CPANELUSER\ajax-list.php</b> on line <b>32</b><br /> <br /> <b>Notice</b>: Undefined index: length in <b>C:\Host\htdocs\CMS-DELIVERY\CPANELUSER\ajax-list.php</b> on line <b>32</b><br /> You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1  
      No arquivo php esta assim
      <?php session_start(); header('Content-Type: application/json'); require('./database/config.php'); require('./database/config.database.php'); require_once('./includes/funcoes.php'); //require('ssp.class.php'); $Campos = "'DL.id, DL.titulo, DL.telefone, DC.titulo as CityTitulo'"; $column = array("DL.id", "DL.titulo", "DC.titulo", "DL.destaque"); $queryIJ = 'directory_listing DL inner join directory_cidades DC on(DL.cidade = DC.titulo)'; $query = "WHERE DC.status=1 AND DL.status=1 "; if (isset($_POST["is_category"])) { $query = "DL.cidade = '" . $_POST["is_category"] . "' AND "; } if (isset($_POST["search"]["value"])) { $query = '(DL.id LIKE "%' . $_POST["search"]["value"] . '%" OR DL.titulo LIKE "%' . $_POST["search"]["value"] . '%" OR DL.telefone LIKE "%' . $_POST["search"]["value"] . '%") '; } if (isset($_POST["order"])) { $query = 'ORDER BY ' . $column[$_POST['order']['0']['column']] . ' ' . $_POST['order']['0']['dir'] . ' '; } else { $query = 'ORDER BY DL.id DESC '; } $query1 = ''; if ($_POST["length"] != 1) { $query1 = 'LIMIT ' . $_POST["start"]. ', ' . $_POST["length"]; } define('QUERYIJ', $queryIJ); define('CAMPOS', $Campos); define('QUERY', $query); define('QUERY1', $query1); $number_filter_row = DBCount(QUERYIJ,CAMPOS,QUERY); function ListarDirectoryEmpresaCidade($Q1 = QUERYIJ, $Camp = CAMPOS, $Query2 = QUERY, $Query3 = QUERY1) { $QueryInnerJoin = DBRead($Q1,$Camp, $Query2 .$Query3); return groupByEmpresaByCidade($QueryInnerJoin,'CityTitulo'); } function groupByEmpresaByCidade($array, $key) { $return = array(); foreach($array as $val) { $return[$val[$key]][] = $val; } return $return; } $data = array(); $ListarDirectoryEmpresa = ListarDirectoryEmpresaCidade(); foreach ($ListarDirectoryEmpresa as $ListarCidade) { //$ListarCidade[0]['CityTitulo'] foreach ($ListarCidade as $ListarDirectory) { //$ListarDirectory['titulo'] $sub_array = array(); $sub_array[] = $ListarDirectory["id"]; $sub_array[] = $ListarDirectory["titulo"]; $sub_array[] = $ListarCidade[0]['CityTitulo']; $sub_array[] = $ListarDirectory["telefone"]; $data[] = $sub_array; } } $result = DBCount('directory_listing','*'); $output = array( "draw" => intval($_POST["draw"]), "recordsTotal" => $result, "recordsFiltered" => $number_filter_row, "data" => $data ); echo json_encode($output); ?> Ja no html esta assim
       
      <div class="table-responsive"> <table id="list_data" class="table table-bordered table-striped"> <thead> <tr> <th>Id.</th> <th>Titulo</th> <th> <select name="directory_cidades" id="directory_cidades" class="form-control"> <option value="">Buscar Cidade</option> <?php $Query = DBRead('directory_cidades','*',"ORDER BY titulo ASC"); foreach($Query as $rows) { echo '<option value="' . $rows["titulo"] . '">' . $rows["titulo"] . '</option>'; } ?> </select> </th> <th>Telefone</th> </tr> </thead> </table> </div> No javascript esta assim
       
      <script type="text/javascript" language="javascript"> $(document).ready(function() { load_data(); function load_data(is_category) { var dataTable = $('#list_data').DataTable({ "processing": true, "serverSide": true, "order": [], "ajax": { url: "ajax-list.php", type: "POST", data: { is_category: is_category } }, "columnDefs": [{ "targets": [2], "orderable": false, }, ], }); } $(document).on('change', '#directory_cidades', function() { var directory_cidades = $(this).val(); $('#list_data').DataTable().destroy(); if (directory_cidades != '') { load_data(directory_cidades); } else { load_data(); } }); }); </script> Sei que o problema não esta no html e nem no javacript postei eles para melhor entender
    • By mateus.andriollo
      Tenho uma tabela evento com campo participantes tipo Json, valores nela são armazenados desta forma
      [1,2,44] Sendo eles códigos de usuários.
       
      Em uma select gostaria de consultar o evento e retornar os nomes dos participantes, porém consultando em uma tabela usuário.
       
      Pensei em fazer inner, depois criei uma subselect fazendo consulta com IN mas só encontra o primeiro usuário
    • By Fernando Rafael
      Bom dia, estou baixando arquivos que estão em uma hospedagem própria para serem acessados por um aplicativo que estou desenvolvendo (consigo fazer normalmente utilizando os comandos citado mais a baixo), porém os arquivos ficam salvos na pasta padrão de DOWNLOADS do Android, minha intenção não é ficar acumulando estes arquivos no aparelho, ou esperar que o usuário exclua manualmente, gostaria em salva-los em uma pasta interna do aplicativo para que seja possível excluir automaticamente pelo próprio aplicativo, já tentei como alternativa excluir esses arquivos da pasta DOWNLOADS, mas não consegui...
       
      Segue o código que estou usando para baixar os arquivos, queria adaptar para baixar direto na pasta interna do aplicativo, ou como alternativa caso isso não seja possível, conseguir excluir esses arquivos da pasta DOWNLOADS do Android...
       
      String url = "https://www.site.com/arquivo.pdf"; //Arquivo que vou baixar DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); request.setDescription("Alguma descrição"); request.setTitle("Algum titulo"); //A notificação de conslusão só esta disponível a partir da API 11 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { request.allowScanningByMediaScanner(); request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); } //Salvando o arquivo no diretório de Downloads request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "arquivo.pdf"); DownloadManager manager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); manager.enqueue(request);  
    • By Fernando Rafael
      Bom dia, alguém poderia me ajudar com esse problema? 
       
      Estou fazendo um aplicativo bem simples em que sua única função será criar uma pasta no celular (em local acessível pelo gerenciador de arquivos do usuário), e posteriormente copiar arquivos de outro local ou rede e colocar nesta pasta.
       
      Fiz algumas pesquisas, mas por incrível que pareça não encontrei algo que tenha funcionando. Também tenho dúvidas sobre qual seria o equivalente ao "C:/" do Android.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.