Problemas com URL

Então pessoal,eu tenho esse codigo aqui:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.lang.Double;

public class Teste {
    public static void main(String[] args) throws IOException {
    //key:1DZO65QEO50KA0XG
    
    URL media = new URL("https://www.alphavantage.co/query?function=SMA&         symbol=MSFT&interval=daily&time_period=10&series_type=close&apikey=1DZO65QEO50KA0XG");
    
    try (
        /*BufferedReader, le o arquivo 
        InputStreamReader, ele converte bytes p caracteres q seria o fluxo"Stream" q entra
        openStream(), abre o acesso do fluxo pela url, ou seja, ele conecta e recupera a informação da página   
        */
        BufferedReader in = new BufferedReader(
        new InputStreamReader(media.openStream()))) {
        String inputLine;
        while ((inputLine = in.readLine()) != null){
            System.out.println(inputLine); 
            System.out.println(media.getContent());
        }//fim while
        
       
    }//fim new 
    
}//fim main

}

E ele me mostra dados assim:

“2019-07-03”: {
“SMA”: “135.6890”
},

porém,eu só quero pegar a data e o que vem depois de SMA,ou seja aqueles números que estão dentro das aspas,e armazenar a data em uma variavel ou array e os numeros em outro,como eu faço isso?Já tentei usar split e tokenizer e nenhum funcionou

Esse é o retorno do serviço chamado.
Você tem duas opções:
1 - Tratar como String e fazer splits para cada parte que deseja
2 - Serializar para objeto (usando jackson ou gson) e pegar os valores desejados.

2 curtidas

Eu tentei fazer da primeira forma porém deu muitos erros,e o codigo acabou ficando confuso e grande então eu apaguei e comecei dnvo.Mas como eu faço a segunda maneira então?

Você poderia ter postado a forma como tentou.

Se você não quer usar nenhuma API de parsing de JSon, você pode utilizar somente o métodos da classe String sim, só precisava elaborar a lógica de como ler os campos.

Seus valores estão no formato abaixo, certo?

"2019-07-03": {
    "SMA": "135.6890"
},

Você já lê o arquivo linha à linha, então basicamente você tem que fazer o seguinte:
Cada vez que a linha lida iniciar com "SMA:" você extrai a data da linha anterior e o valor da linha atual.

Veja:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;

public class Programa {

    public static void main(String[] args) {
        try {
            Programa programa = new Programa();
            programa.executar();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    public void executar() throws Exception {
        String endereco = "https://www.alphavantage.co/query?function=SMA&symbol=MSFT&interval=daily&time_period=10&series_type=close&apikey=1DZO65QEO50KA0XG";
        URL url = new URL(endereco);
        BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
        String linhaAnterior = null;
        String linhaAtual = null;
        while ((linhaAtual = reader.readLine()) != null) {
            linhaAtual = linhaAtual.trim().replaceAll("\"", ""); // remover aspas
            if (linhaAtual.startsWith("SMA:")) { // a linha atual começa com SMA: ?
                // extrair a data da linha anterior
                String[] partes = linhaAnterior.split("\\:\\s");
                String data = partes[0];
                // extrair o valor da linha atual
                partes = linhaAtual.split("\\:\\s");
                String valor = partes[1];
                // apresentar data e valor
                System.out.println(data + " = " + valor);
            }
            linhaAnterior = linhaAtual; // quando repetir o laço, a linha atual passa a ser a linha anterior
        }
        reader.close();
    }
}
1 curtida