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.
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?
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();
}
}